From 60bfdc1db4672cc3a0e7ef0834b06aa383de867c Mon Sep 17 00:00:00 2001 From: jdhitsolutions Date: Mon, 3 Jul 2023 11:06:16 -0400 Subject: [PATCH] v3.5.0 --- Changelog.md | 51 +- ISEScriptingGeek.psd1 | 170 ++----- ISEScriptingGeek.psm1 | Bin 16584 -> 16878 bytes License.txt | 2 +- README.md | 28 +- docs/Add-CurrentProject.md | 2 +- docs/Add-ISEBookmark.md | 2 +- docs/Convert-AliasDefinition.md | 2 +- docs/Convert-CodetoSnippet.md | 6 +- docs/Convert-CommandtoHash.md | 6 +- docs/ConvertFrom-Alias.md | 2 +- docs/ConvertFrom-MultiLineComment.md | 2 +- docs/ConvertTo-CommentHelp.md | 2 +- docs/ConvertTo-Definition.md | 2 +- docs/ConvertTo-MultiLineComment.md | 2 +- docs/ConvertTo-TextFile.md | 2 +- docs/Copy-ToWord.md | 2 +- docs/Edit-CurrentProject.md | 2 +- docs/Edit-Snippet.md | 2 +- docs/Find-InFile.md | 2 +- docs/Get-ASTProfile.md | 2 +- docs/Get-ScriptingHelp.md | 2 +- docs/Import-CurrentProject.md | 2 +- docs/New-CIMCommand.md | 2 +- docs/New-CommentHelp.md | 2 +- docs/New-DSCResourceSnippet.md | 2 +- docs/New-FileHere.md | 4 +- docs/New-Function.md | 2 +- docs/New-Inputbox.md | 12 +- en-us/ISEScriptingGeek-help.xml | 668 +++++++++++++++----------- functions/Bookmarks.ps1 | 42 +- functions/CIMScriptMaker.ps1 | 130 ++--- functions/CloseAllFiles.ps1 | 18 +- functions/Convert-AliasDefinition.ps1 | 33 +- functions/Convert-CodetoSnippet.ps1 | 34 +- functions/Convert-CommandToHash.ps1 | 62 +-- functions/Convert-ISEComment.ps1 | 28 +- functions/ConvertAll.ps1 | Bin 2912 -> 1401 bytes functions/ConvertFrom-Alias.ps1 | 28 +- functions/ConvertTo-CommentHelp.ps1 | 26 +- functions/ConvertTo-TextFile.ps1 | Bin 1406 -> 676 bytes functions/Copy-ToWord.ps1 | 10 +- functions/CurrentProjects.ps1 | 33 +- functions/CycleISETabs.ps1 | 11 +- functions/Edit-Snippet.ps1 | 10 +- functions/Find-InFile.ps1 | Bin 3686 -> 1801 bytes functions/Get-ASTScriptProfile.ps1 | 67 ++- functions/Get-ScriptComments.ps1 | 32 +- functions/Get-SearchResult.ps1 | 18 +- functions/New-CommentHelp.ps1 | 38 +- functions/New-DSCResourceSnippet.ps1 | 57 ++- functions/New-FileHere.ps1 | 31 +- functions/New-ISEFunction.ps1 | Bin 2602 -> 1197 bytes functions/New-InputBox.ps1 | 24 +- functions/New-PSCommand.ps1 | Bin 7352 -> 3525 bytes functions/Open-SelectedInISE.ps1 | 8 +- functions/Out-ISETab.ps1 | Bin 1912 -> 893 bytes functions/Print-ISEFile.ps1 | 8 +- functions/Reload-ISEFile.ps1 | 16 +- functions/Sign-ISEScript.ps1 | 25 +- functions/get-commandmetadata.ps1 | 55 ++- images/convert-menu.png | Bin 0 -> 11856 bytes images/datetime-menu.png | Bin 0 -> 5320 bytes images/files-menu.png | Bin 0 -> 10629 bytes 64 files changed, 920 insertions(+), 911 deletions(-) create mode 100644 images/convert-menu.png create mode 100644 images/datetime-menu.png create mode 100644 images/files-menu.png diff --git a/Changelog.md b/Changelog.md index 33f54d2..82ff20c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,47 +1,54 @@ # ChangeLog for ISEScriptingGeek Module +## v3.5.0 + +- Code cleanup. +- Modified `Sign-ISEScript` to support `-WhatIf`. +- Updated `README.md`. +- Added online help links. + ## v3.4.2 -+ Updated license -+ Updated manifest to PowerShell 5.1 and supporting Desktop edition +- Updated license +- Updated manifest to PowerShell 5.1 and supporting Desktop edition ## v3.4.1 -+ Replaced `Out-Null` references to using `[void]` -+ Cleaned up incorrect exported aliases -+ Code clean up and reformatting +- Replaced `Out-Null` references to using `[void]` +- Cleaned up incorrect exported aliases +- Code clean up and reformatting ## v3.4.0 -+ code cleanup as some commands have moved to the PSScriptTools module. -+ Moved help to external files (Issue #11) -+ Renamed `changelog.txt` to `changelog.md` -+ module restructuring -+ Updated `README.md` +- code cleanup as some commands have moved to the PSScriptTools module. +- Moved help to external files (Issue #11) +- Renamed `changelog.txt` to `changelog.md` +- module restructuring +- Updated `README.md` ## v3.3.0.0 -+ Added New-FileHere command -+ Fixed Open-SelectedISE to trim spaces from selected text and write a warning if file not found. -+ Added ChangeLog.txt file. -+ Added #requires -module PSDesiredStateConfiguration to New-DSCResourceSnippet.ps1 -+ Switched to MIT license +- Added New-FileHere command +- Fixed Open-SelectedISE to trim spaces from selected text and write a warning if file not found. +- Added ChangeLog.txt file. +- Added #requires -module PSDesiredStateConfiguration to New-DSCResourceSnippet.ps1 +- Switched to MIT license ## v3.3.1.0 -+ Fixed a bug with New-CommentHelp to accept no parameters -+ Updated New-CommentHelp to ignore new Information related common parameters in v5 +- Fixed a bug with New-CommentHelp to accept no parameters +- Updated New-CommentHelp to ignore new Information related common parameters in v5 ## v3.3.1.1 -+ Updated New-FileHere function +- Updated New-FileHere function ## v3.3.1.2 -+ Published to PowerShell Gallery with a v5 manifest. +- Published to PowerShell Gallery with a v5 manifest. ## v3.3.1.3 -+ updated module manifest -+ Updated script signing to support multiple certificates -+ Updated author name in manifest +- updated module manifest +- Updated script signing to support multiple certificates +- Updated author name in manifest diff --git a/ISEScriptingGeek.psd1 b/ISEScriptingGeek.psd1 index 2b4c4d2..84c0aeb 100644 --- a/ISEScriptingGeek.psd1 +++ b/ISEScriptingGeek.psd1 @@ -1,139 +1,45 @@ @{ -# Script module or binary module file associated with this manifest. -RootModule = 'ISEScriptingGeek.psm1' + RootModule = 'ISEScriptingGeek.psm1' + ModuleVersion = '3.5.0' + CompatiblePSEditions = @('Desktop') + GUID = '6d1078ea-36c8-443a-9476-6d6c4d6ac834' + Author = 'Jeff Hicks' + CompanyName = 'JDH Information Technology Solutions, Inc.' + Copyright = '2013-2023 JDH Information Technology Solutions, Inc. All Rights Reserved.' + Description = 'Functions and add-ons for the Windows PowerShell ISE and later. This module is a kind of resource kit for the PowerShell ISE.' + PowerShellVersion = '5.1' + TypesToProcess = @() + FormatsToProcess = @() + FunctionsToExport = 'Add-CurrentProject', 'Add-ISEBookmark', 'CloseAllFiles', + 'CloseAllFilesButCurrent', 'Convert-AliasDefinition', + 'Convert-CodeToSnippet', 'Convert-CommandToHash', 'ConvertFrom-Alias', + 'ConvertFrom-MultiLineComment', 'ConvertTo-CommentHelp', + 'ConvertTo-Definition', 'ConvertTo-MultiLineComment', + 'ConvertTo-TextFile', 'Copy-ToWord', 'Edit-CurrentProject', + 'Edit-Snippet', 'Find-InFile', 'Get-ASTProfile', 'Get-CommandMetadata', + 'Get-ISEBookmark', 'Get-NextISETab', 'Get-ScriptComments', + 'Get-ScriptingHelp', 'Get-SearchResult', 'Import-CurrentProject', + 'New-CIMCommand', 'New-CommentHelp', 'New-DSCResourceSnippet', + 'New-FileHere', 'New-InputBox', 'New-PSCommand', + 'Open-ISEBookmark', 'Open-SelectedISE', 'Out-ISETab', + 'Remove-ISEBookmark', 'Reset-ISEFile', 'Send-ToPrinter', + 'Start-MyScript', 'Update-ISEBookmark', 'Write-Signature', + 'New-Function', 'Set-ScriptLocation' + + CmdletsToExport = @() + VariablesToExport = 'MySnippets', 'MyModules', 'MyPowerShell', 'CurrentProjectList' + AliasesToExport = 'ccs', 'gcmd', 'glcm''tab', 'sd' + PrivateData = @{ + PSData = @{ + Tags = 'ISE', 'Snippets', 'Scripting', 'PowerShellISE' + LicenseUri = 'https://github.com/jdhitsolutions/ISEScriptingGeek/blob/master/License.txt' + ProjectUri = 'https://github.com/jdhitsolutions/ISEScriptingGeek' + } # End of PSData hashtable + + } # End of PrivateData hashtable -# Version number of this module. -ModuleVersion = '3.4.2' - -# Supported PSEditions -CompatiblePSEditions = @('Desktop') - -# ID used to uniquely identify this module -GUID = '6d1078ea-36c8-443a-9476-6d6c4d6ac834' - -# Author of this module -Author = 'Jeff Hicks' - -# Company or vendor of this module -CompanyName = 'JDH Information Technology Solutions, Inc.' - -# Copyright statement for this module -Copyright = '2013-2020 JDH Information Technology Solutions, Inc. All Rights Reserved.' - -# Description of the functionality provided by this module -Description = 'Functions and add-ons for the Windows PowerShell ISE v4.0 and later' - -# Minimum version of the Windows PowerShell engine required by this module -PowerShellVersion = '5.1' - -# Name of the Windows PowerShell host required by this module -# PowerShellHostName = '' - -# Minimum version of the Windows PowerShell host required by this module -# PowerShellHostVersion = '' - -# Minimum version of Microsoft .NET Framework required by this module -# DotNetFrameworkVersion = '' - -# Minimum version of the common language runtime (CLR) required by this module -CLRVersion = '4.0' - -# Processor architecture (None, X86, Amd64) required by this module -ProcessorArchitecture = 'None' - -# Modules that must be imported into the global environment prior to importing this module -# RequiredModules = @() - -# Assemblies that must be loaded prior to importing this module -RequiredAssemblies = @() - -# Script files (.ps1) that are run in the caller's environment prior to importing this module. -ScriptsToProcess = @() - -# Type files (.ps1xml) to be loaded when importing this module -TypesToProcess = @() - -# Format files (.ps1xml) to be loaded when importing this module -FormatsToProcess = @() - -# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess -# NestedModules = @() - -# Functions to export from this module -FunctionsToExport = 'Add-CurrentProject', 'Add-ISEBookmark', 'CloseAllFiles', - 'CloseAllFilesButCurrent', 'Convert-AliasDefinition', - 'Convert-CodetoSnippet', 'Convert-CommandtoHash', 'ConvertFrom-Alias', - 'ConvertFrom-MultiLineComment', 'ConvertTo-CommentHelp', - 'ConvertTo-Definition', 'ConvertTo-MultiLineComment', - 'ConvertTo-TextFile', 'Copy-ToWord', 'Edit-CurrentProject', - 'Edit-Snippet', 'Find-InFile', 'Get-ASTProfile', 'Get-CommandMetadata', - 'Get-ISEBookmark', 'Get-NextISETab', 'Get-ScriptComments', - 'Get-ScriptingHelp', 'Get-SearchResult', 'Import-CurrentProject', - 'New-CIMCommand', 'New-CommentHelp', 'New-DSCResourceSnippet', - 'New-FileHere', 'New-Inputbox', 'New-PSCommand', - 'Open-ISEBookmark', 'Open-SelectedISE', 'Out-ISETab', - 'Remove-ISEBookmark', 'Reset-ISEFile', 'Send-ToPrinter', - 'Start-MyScript', 'Update-ISEBookmark', 'Write-Signature', - 'New-Function','Set-ScriptLocation' - -# Cmdlets to export from this module -CmdletsToExport = @() - -# Variables to export from this module -VariablesToExport = 'MySnippets', 'MyModules', 'MyPowerShell', 'CurrentProjectList' - -# Aliases to export from this module -AliasesToExport = 'ccs','gcmd','glcm''tab','sd' - -# DSC resources to export from this module -# DscResourcesToExport = @() - -# List of all modules packaged with this module -# ModuleList = @() - -# List of all files packaged with this module -#FileList = '' - -# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. -PrivateData = @{ - - #Category of this module - Category = 'PowerShell ISE' - - #IsPrerelease of this module - IsPrerelease = 'False' - - PSData = @{ - - # Tags applied to this module. These help with module discovery in online galleries. - Tags = 'ISE','Snippets','Scripting' - - # A URL to the license for this module. - LicenseUri = 'https://github.com/jdhitsolutions/ISEScriptingGeek/blob/master/License.txt' - - # A URL to the main website for this project. - ProjectUri = 'https://github.com/jdhitsolutions/ISEScriptingGeek' - - # A URL to an icon representing this module. - # IconUri = '' - - # ReleaseNotes of this module - # ReleaseNotes = '' - - # External dependent modules of this module - # ExternalModuleDependencies = '' - - } # End of PSData hashtable - -} # End of PrivateData hashtable - -# HelpInfo URI of this module -# HelpInfoURI = '' - -# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. -# DefaultCommandPrefix = '' } diff --git a/ISEScriptingGeek.psm1 b/ISEScriptingGeek.psm1 index ff75e3570c31725929356a46229e06f76313e7ab..8342ba1310af71eaf10e8a483c4d020e4e908a9e 100644 GIT binary patch delta 1160 zcmX@n$oQ_Aae_ai=f(hSCi!57M20ekR0ci?PAfVBgcXkh#m$zA*FYW>P!(fT5Tn6Npnc zuV6}N5eG9F^ca#EN*RiPFqI*Xp@boAvl@FMvvd|i3PT1^bqUlgB;Au&FzHUd&-H;F zs%G*Baq-FPrMV`v^Y|f&=}(@`V*%&;2`EnH<_&}MKZq+%p2_O~=Y!-0`Id0P?Va3U zr9Sy9-xF4_Gbc$oZk89wV`MCu+$X3C7n>|Ez&826;3k-W=H&ZA7BG(E=2+ncjBwuM zTrrNx-lBJq1!m|XhY%>lko<`mG?N2V#ThdvKaiA$8REWqu{a+SuAszJ-wXFJEYOZh z?SYH=35aiAFa3lSNkDP)X~k=d(j~yC$OXob5`zvnVv(FVNebj^vCY4g-5B}N;u7Ql z-b`S;0wWz5!zBzQlM6JZC-qa>TyJPHd9Ohi+)RkrF%*8SQ3eWM*0=-C2f5*{aS(>Nr6y@8 zZUvdEXsQKCev<=CjgmENiK@dA`{hW{^RfE3Hb|0T#d{ AfB*mh diff --git a/License.txt b/License.txt index 6bb8e93..7ead2a9 100644 --- a/License.txt +++ b/License.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2015-2022 JDH Information Technology Solutions, Inc. +Copyright (c) 2015-2023 JDH Information Technology Solutions, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index c012c26..01b4be2 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ [![PSGallery Version](https://img.shields.io/powershellgallery/v/ISEScriptingGeek.png?style=for-the-badge&logo=powershell&label=PowerShell%20Gallery)](https://www.powershellgallery.com/packages/ISEScriptingGeek/) [![PSGallery Downloads](https://img.shields.io/powershellgallery/dt/ISEScriptingGeek.png?style=for-the-badge&label=Downloads)](https://www.powershellgallery.com/packages/ISEScriptingGeek/) -This module is a set of ISE add-ons and a few themes. It requires PowerShell5.1 or higher. +This module is a set of PowerShell ISE add-ons and a few themes. It requires PowerShell 5.1. -_As of February 2019 I no longer intend to update or extend this module. VS Code is clearly Microsoft's choice for a scripting tool going forward. The PowerShell ISE isn't going away any time soon, but it is also no longer under active development so I need no point in continuing to develop this module. I will maintain it and address pull requests should members of the community wish to contribute, maintain or extend this module._ +_As of February 2019, I no longer intend to update or extend this module. VS Code is Microsoft's choice for a scripting editor going forward. The PowerShell ISE isn't going away any time soon, but it is also no longer under active development so I need no point in continuing to develop this module. I will maintain it and address pull requests should members of the community wish to contribute, maintain or extend this module._ Install the module from the PowerShell Gallery. @@ -18,7 +18,7 @@ Then in your PowerShell_ISE profile script, import the module. Import-Module ISEScriptingGeek ``` -This will add the menu short cuts. +This will add shortcuts to the Add-Ons menu. ## Themes @@ -38,20 +38,22 @@ A set of functions for creating and working with "bookmarks" to files opened in ### Convert -These handle various conversions such as: +The module will add shortcuts to code that will perform conversions on the file or selected text. -- selected text to snippet, region -- case conversion -- alias expansion +![Convert menu](images/convert-menu.png) ### Dates and times -A set of functions for inserting date/time in different formats +A set of functions for inserting date/time in different formats. + +![DateTime menu](images/datetime-menu.png) ### Files A set of functions for working with open files and their associated folders +![Files menu](images/files-menu.png) + ### Work A set of functions for creating and managing a "work list" of files @@ -60,9 +62,15 @@ A set of functions for creating and managing a "work list" of files There are also other scripts directly off the **ISE Scripting Geek** menu, these functions provide various capabilities: -- Print, Run or Sign script -- Send script to Word (with or without color) +- Print, Run, or Sign a script +- Send the script to Word (with or without color) - Send selected text to different search engines - Help functions - New CIM Command, DSC Resource snippets, etc. +## Other Modules of Interest + +You might also be interested in these modules: + +- [ISERemoteTab](https://github.com/jdhitsolutions/New-ISERemoteTab) +- [PSScriptTools](https://github.com/jdhitsolutions/PSScriptTools) diff --git a/docs/Add-CurrentProject.md b/docs/Add-CurrentProject.md index b483b04..eba242c 100644 --- a/docs/Add-CurrentProject.md +++ b/docs/Add-CurrentProject.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3JFSsPH schema: 2.0.0 --- diff --git a/docs/Add-ISEBookmark.md b/docs/Add-ISEBookmark.md index 9129d58..77f0652 100644 --- a/docs/Add-ISEBookmark.md +++ b/docs/Add-ISEBookmark.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3CZvOhA schema: 2.0.0 --- diff --git a/docs/Convert-AliasDefinition.md b/docs/Convert-AliasDefinition.md index 1cef2a7..a74be65 100644 --- a/docs/Convert-AliasDefinition.md +++ b/docs/Convert-AliasDefinition.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3rgLha6 schema: 2.0.0 --- diff --git a/docs/Convert-CodetoSnippet.md b/docs/Convert-CodetoSnippet.md index f5ecb36..d0a70e5 100644 --- a/docs/Convert-CodetoSnippet.md +++ b/docs/Convert-CodetoSnippet.md @@ -1,11 +1,11 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3JJq4MC schema: 2.0.0 --- -# Convert-CodetoSnippet +# Convert-CodeToSnippet ## SYNOPSIS @@ -14,7 +14,7 @@ Convert selected code to a snippet ## SYNTAX ```yaml -Convert-CodetoSnippet [-Text] [-WhatIf] [-Confirm] [] +Convert-CodeToSnippet [-Text] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION diff --git a/docs/Convert-CommandtoHash.md b/docs/Convert-CommandtoHash.md index f9cd30c..22cea79 100644 --- a/docs/Convert-CommandtoHash.md +++ b/docs/Convert-CommandtoHash.md @@ -1,11 +1,11 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3CYzPmk schema: 2.0.0 --- -# Convert-CommandtoHash +# Convert-CommandToHash ## SYNOPSIS @@ -14,7 +14,7 @@ Convert a command to a hashtable ## SYNTAX ```yaml -Convert-CommandtoHash [[-Text] ] [] +Convert-CommandToHash [[-Text] ] [] ``` ## DESCRIPTION diff --git a/docs/ConvertFrom-Alias.md b/docs/ConvertFrom-Alias.md index 17a0d45..688e736 100644 --- a/docs/ConvertFrom-Alias.md +++ b/docs/ConvertFrom-Alias.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/434MYF7 schema: 2.0.0 --- diff --git a/docs/ConvertFrom-MultiLineComment.md b/docs/ConvertFrom-MultiLineComment.md index 8390c45..308bd9c 100644 --- a/docs/ConvertFrom-MultiLineComment.md +++ b/docs/ConvertFrom-MultiLineComment.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/43hZ4ec schema: 2.0.0 --- diff --git a/docs/ConvertTo-CommentHelp.md b/docs/ConvertTo-CommentHelp.md index 59ab9ef..13528a0 100644 --- a/docs/ConvertTo-CommentHelp.md +++ b/docs/ConvertTo-CommentHelp.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/43engOi schema: 2.0.0 --- diff --git a/docs/ConvertTo-Definition.md b/docs/ConvertTo-Definition.md index 6c0ccf2..6190a08 100644 --- a/docs/ConvertTo-Definition.md +++ b/docs/ConvertTo-Definition.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3PHU5Ai schema: 2.0.0 --- diff --git a/docs/ConvertTo-MultiLineComment.md b/docs/ConvertTo-MultiLineComment.md index b8eb3c7..cad8f58 100644 --- a/docs/ConvertTo-MultiLineComment.md +++ b/docs/ConvertTo-MultiLineComment.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/46vHjux schema: 2.0.0 --- diff --git a/docs/ConvertTo-TextFile.md b/docs/ConvertTo-TextFile.md index c50d1b9..f3729c9 100644 --- a/docs/ConvertTo-TextFile.md +++ b/docs/ConvertTo-TextFile.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3CVWVd5 schema: 2.0.0 --- diff --git a/docs/Copy-ToWord.md b/docs/Copy-ToWord.md index a09660c..a7899ac 100644 --- a/docs/Copy-ToWord.md +++ b/docs/Copy-ToWord.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3prdWZR schema: 2.0.0 --- diff --git a/docs/Edit-CurrentProject.md b/docs/Edit-CurrentProject.md index e110328..0f9e59b 100644 --- a/docs/Edit-CurrentProject.md +++ b/docs/Edit-CurrentProject.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3pwavkq schema: 2.0.0 --- diff --git a/docs/Edit-Snippet.md b/docs/Edit-Snippet.md index 250cd0b..a759ddf 100644 --- a/docs/Edit-Snippet.md +++ b/docs/Edit-Snippet.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3JJ3io9 schema: 2.0.0 --- diff --git a/docs/Find-InFile.md b/docs/Find-InFile.md index f033174..07af28b 100644 --- a/docs/Find-InFile.md +++ b/docs/Find-InFile.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3XzvFe2 schema: 2.0.0 --- diff --git a/docs/Get-ASTProfile.md b/docs/Get-ASTProfile.md index 6950404..76f07e1 100644 --- a/docs/Get-ASTProfile.md +++ b/docs/Get-ASTProfile.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/46zLt4M schema: 2.0.0 --- diff --git a/docs/Get-ScriptingHelp.md b/docs/Get-ScriptingHelp.md index 3ba71d4..8c9d4bf 100644 --- a/docs/Get-ScriptingHelp.md +++ b/docs/Get-ScriptingHelp.md @@ -19,7 +19,7 @@ Get-ScriptingHelp ## DESCRIPTION -Use this command to select about_scripting topics using Out-Gridview. +Use this command to select about_scripting topics using Out-GridView. ## PARAMETERS diff --git a/docs/Import-CurrentProject.md b/docs/Import-CurrentProject.md index 8926253..b4c1531 100644 --- a/docs/Import-CurrentProject.md +++ b/docs/Import-CurrentProject.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/43cHEzr schema: 2.0.0 --- diff --git a/docs/New-CIMCommand.md b/docs/New-CIMCommand.md index ff46abb..7b3327e 100644 --- a/docs/New-CIMCommand.md +++ b/docs/New-CIMCommand.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/46zL8Py schema: 2.0.0 --- diff --git a/docs/New-CommentHelp.md b/docs/New-CommentHelp.md index 24457f8..78f936e 100644 --- a/docs/New-CommentHelp.md +++ b/docs/New-CommentHelp.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/44ad8Y7 schema: 2.0.0 --- diff --git a/docs/New-DSCResourceSnippet.md b/docs/New-DSCResourceSnippet.md index 3c0b9f7..cbd4414 100644 --- a/docs/New-DSCResourceSnippet.md +++ b/docs/New-DSCResourceSnippet.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/3NzEzUd schema: 2.0.0 --- diff --git a/docs/New-FileHere.md b/docs/New-FileHere.md index 09735fb..7d18548 100644 --- a/docs/New-FileHere.md +++ b/docs/New-FileHere.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/46vYeND schema: 2.0.0 --- @@ -36,7 +36,7 @@ Aliases: Required: False Position: 1 -Default value: (New-Inputbox -Prompt "Enter a file name" -Title "New File" -Default "MyUntitled.ps1") +Default value: (New-InputBox -Prompt "Enter a file name" -Title "New File" -Default "MyUntitled.ps1") Accept pipeline input: False Accept wildcard characters: False ``` diff --git a/docs/New-Function.md b/docs/New-Function.md index 286cf4b..f4a4f6d 100644 --- a/docs/New-Function.md +++ b/docs/New-Function.md @@ -1,7 +1,7 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/449BGAK schema: 2.0.0 --- diff --git a/docs/New-Inputbox.md b/docs/New-Inputbox.md index 7fcd8c0..b686d66 100644 --- a/docs/New-Inputbox.md +++ b/docs/New-Inputbox.md @@ -1,32 +1,32 @@ --- external help file: ISEScriptingGeek-help.xml Module Name: ISEScriptingGeek -online version: +online version: https://bit.ly/43bAgo3 schema: 2.0.0 --- -# New-Inputbox +# New-InputBox ## SYNOPSIS -Display a Visual Basic style inputbox. +Display a Visual Basic style InputBox. ## SYNTAX ```yaml -New-Inputbox [-Prompt] [[-Title] ] [[-Default] ] [] +New-InputBox [-Prompt] [[-Title] ] [[-Default] ] [] ``` ## DESCRIPTION -This function will display a graphical Inputbox, like the one from VisualBasic and VBScript. You must specify a messag prompt. You can specify a title, the default is "Input". You can also specify a default value. The inputbox will write whatever is entered into it to the pipeline. If you click Cancel the inputbox will still write a string to the pipeline with a length of 0. It is recommended that you validate input. +This function will display a graphical InputBox, like the one from VisualBasic and VBScript. You must specify a messag prompt. You can specify a title, the default is "Input". You can also specify a default value. The InputBox will write whatever is entered into it to the pipeline. If you click Cancel the InputBox will still write a string to the pipeline with a length of 0. It is recommended that you validate input. ## EXAMPLES ### EXAMPLE 1 ```powershell -PS C:\> $c = New-Inputbox -prompt "Enter the Netbios name of a domain computer." -title "Enter a computername" -default $env:computername +PS C:\> $c = New-InputBox -prompt "Enter the Netbios name of a domain computer." -title "Enter a computername" -default $env:computername PS C:\> get-service -computer $c ``` diff --git a/en-us/ISEScriptingGeek-help.xml b/en-us/ISEScriptingGeek-help.xml index 740bc5e..d3610c7 100644 --- a/en-us/ISEScriptingGeek-help.xml +++ b/en-us/ISEScriptingGeek-help.xml @@ -17,9 +17,9 @@ Add-CurrentProject List - + - + String String @@ -32,9 +32,9 @@ List - + - + String String @@ -52,6 +52,10 @@ + + Online Version: + https://bit.ly/3JFSsPH + Edit-CurrentProject @@ -106,7 +110,12 @@ - + + + Online Version: + https://bit.ly/3CZvOhA + + @@ -125,9 +134,9 @@ Convert-AliasDefinition Text - + Enter a string to convert - + String String @@ -137,9 +146,9 @@ ToAlias - + - + SwitchParameter @@ -151,9 +160,9 @@ Convert-AliasDefinition Text - + Enter a string to convert - + String String @@ -163,9 +172,9 @@ ToDefinition - + - + SwitchParameter @@ -177,9 +186,9 @@ Text - + Enter a string to convert - + String String @@ -189,9 +198,9 @@ ToAlias - + - + SwitchParameter SwitchParameter @@ -201,9 +210,9 @@ ToDefinition - + - + SwitchParameter SwitchParameter @@ -238,13 +247,18 @@ - + + + Online Version: + https://bit.ly/3rgLha6 + + - Convert-CodetoSnippet + Convert-CodeToSnippet Convert - CodetoSnippet + CodeToSnippet Convert selected code to a snippet @@ -254,12 +268,12 @@ - Convert-CodetoSnippet + Convert-CodeToSnippet Text - + Enter some code text or break, select text in the ISE and try again. - + String String @@ -269,9 +283,9 @@ Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter @@ -280,9 +294,9 @@ WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter @@ -294,9 +308,9 @@ Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter SwitchParameter @@ -306,9 +320,9 @@ Text - + Enter some code text or break, select text in the ISE and try again. - + String String @@ -318,9 +332,9 @@ WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter SwitchParameter @@ -355,13 +369,18 @@ - + + + Online Version: + https://bit.ly/3JJq4MC + + - Convert-CommandtoHash + Convert-CommandToHash Convert - CommandtoHash + CommandToHash Convert a command to a hashtable @@ -371,12 +390,12 @@ - Convert-CommandtoHash + Convert-CommandToHash Text - + - + String String @@ -389,9 +408,9 @@ Text - + - + String String @@ -426,7 +445,12 @@ - + + + Online Version: + https://bit.ly/3CYzPmk + + @@ -445,9 +469,9 @@ ConvertFrom-Alias Text - + - + Object Object @@ -460,9 +484,9 @@ Text - + - + Object Object @@ -497,7 +521,12 @@ - + + + Online Version: + https://bit.ly/434MYF7 + + @@ -516,9 +545,9 @@ ConvertFrom-MultiLineComment Text - + - + String String @@ -531,9 +560,9 @@ Text - + - + String String @@ -568,7 +597,12 @@ - + + + Online Version: + https://bit.ly/43hZ4ec + + @@ -614,7 +648,12 @@ - + + + Online Version: + https://bit.ly/43engOi + + @@ -633,9 +672,9 @@ ConvertTo-Definition Text - + Enter a string to convert - + String String @@ -648,9 +687,9 @@ Text - + Enter a string to convert - + String String @@ -685,7 +724,12 @@ - + + + Online Version: + https://bit.ly/3PHU5Ai + + @@ -704,9 +748,9 @@ ConvertTo-MultiLineComment Text - + - + String String @@ -719,9 +763,9 @@ Text - + - + String String @@ -756,7 +800,12 @@ - + + + Online Version: + https://bit.ly/46vHjux + + @@ -775,9 +824,9 @@ ConvertTo-TextFile Reload - + - + SwitchParameter @@ -789,9 +838,9 @@ Reload - + - + SwitchParameter SwitchParameter @@ -826,7 +875,12 @@ - + + + Online Version: + https://bit.ly/3CVWVd5 + + @@ -845,9 +899,9 @@ Copy-ToWord Text - + - + String[] String[] @@ -857,9 +911,9 @@ Colorized - + - + SwitchParameter @@ -871,9 +925,9 @@ Colorized - + - + SwitchParameter SwitchParameter @@ -883,9 +937,9 @@ Text - + - + String[] String[] @@ -920,7 +974,12 @@ - + + + Online Version: + https://bit.ly/3prdWZR + + @@ -940,9 +999,9 @@ Edit-CurrentProject List - + - + String String @@ -955,9 +1014,9 @@ List - + - + String String @@ -975,6 +1034,10 @@ + + Online Version: + https://bit.ly/3pwavkq + Add-CurrentProject @@ -1002,9 +1065,9 @@ Edit-Snippet Path - + - + String String @@ -1017,9 +1080,9 @@ Path - + - + String String @@ -1054,7 +1117,12 @@ - + + + Online Version: + https://bit.ly/3JJ3io9 + + @@ -1100,7 +1168,12 @@ - + + + Online Version: + https://bit.ly/3XzvFe2 + + @@ -1125,9 +1198,9 @@ Get-ASTProfile Path - + The path to the script file. It should have an extension of .ps1, .psm1 or .bat. - + String String @@ -1137,9 +1210,9 @@ FilePath - + The path for the report file. The default is your WindowsPowerShell folder. This parameter has aliases of fp and out. - + String String @@ -1152,9 +1225,9 @@ Path - + The path to the script file. It should have an extension of .ps1, .psm1 or .bat. - + String String @@ -1164,9 +1237,9 @@ FilePath - + The path for the report file. The default is your WindowsPowerShell folder. This parameter has aliases of fp and out. - + String String @@ -1217,6 +1290,10 @@ + + Online Version: + https://bit.ly/46zLt4M + Get-Command @@ -1245,9 +1322,9 @@ Get-CommandMetadata Command - + The name of a PowerShell command to proxy. This can be a cmdlet, function or alias. - + String String @@ -1257,9 +1334,9 @@ NewName - + The name you want to use for your new command. - + String String @@ -1269,9 +1346,9 @@ NoHelp - + Remove references to existing command help. Using this parameter will insert a comment-based help outline. - + SwitchParameter @@ -1283,9 +1360,9 @@ Command - + The name of a PowerShell command to proxy. This can be a cmdlet, function or alias. - + String String @@ -1295,9 +1372,9 @@ NewName - + The name you want to use for your new command. - + String String @@ -1307,9 +1384,9 @@ NoHelp - + Remove references to existing command help. Using this parameter will insert a comment-based help outline. - + SwitchParameter SwitchParameter @@ -1461,9 +1538,9 @@ Get-ScriptComments Path - + Enter the path of a PS1 file - + String String @@ -1476,9 +1553,9 @@ Path - + Enter the path of a PS1 file - + String String @@ -1512,7 +1589,7 @@ - Use this command to select about_scripting topics using Out-Gridview. + Use this command to select about_scripting topics using Out-GridView. @@ -1570,9 +1647,9 @@ Get-SearchResult Text - + - + String String @@ -1582,9 +1659,9 @@ SearchEngine - + - + Bing Google @@ -1602,9 +1679,9 @@ SearchEngine - + - + String String @@ -1614,9 +1691,9 @@ Text - + - + String String @@ -1675,9 +1752,9 @@ Import-CurrentProject List - + - + String String @@ -1690,9 +1767,9 @@ List - + - + String String @@ -1710,6 +1787,10 @@ + + Online Version: + https://bit.ly/43cHEzr + Add-CurrentProject @@ -1737,9 +1818,9 @@ New-CIMCommand computername - + - + String String @@ -1752,9 +1833,9 @@ computername - + - + String String @@ -1789,7 +1870,12 @@ - + + + Online Version: + https://bit.ly/46zL8Py + + @@ -1808,9 +1894,9 @@ New-CommentHelp Name - + What is the name of your function or command? - + String String @@ -1820,9 +1906,9 @@ Synopsis - + Enter a brief synopsis - + String String @@ -1832,9 +1918,9 @@ Description - + Enter a description. You can expand and edit later - + String String @@ -1847,9 +1933,9 @@ Description - + Enter a description. You can expand and edit later - + String String @@ -1859,9 +1945,9 @@ Name - + What is the name of your function or command? - + String String @@ -1871,9 +1957,9 @@ Synopsis - + Enter a brief synopsis - + String String @@ -1908,7 +1994,12 @@ - + + + Online Version: + https://bit.ly/44ad8Y7 + + @@ -1929,9 +2020,9 @@ New-DSCResourceSnippet Name - + Enter the name of a DSC resource - + String[] String[] @@ -1941,9 +2032,9 @@ Author - + - + String String @@ -1953,9 +2044,9 @@ Passthru - + - + SwitchParameter @@ -1964,9 +2055,9 @@ WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter @@ -1975,9 +2066,9 @@ Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter @@ -1989,9 +2080,9 @@ New-DSCResourceSnippet DSCResource - + Enter the name of a DSC resource - + DscResourceInfo[] DscResourceInfo[] @@ -2001,9 +2092,9 @@ Author - + - + String String @@ -2013,9 +2104,9 @@ Passthru - + - + SwitchParameter @@ -2024,9 +2115,9 @@ WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter @@ -2035,9 +2126,9 @@ Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter @@ -2049,9 +2140,9 @@ Name - + Enter the name of a DSC resource - + String[] String[] @@ -2061,9 +2152,9 @@ DSCResource - + Enter the name of a DSC resource - + DscResourceInfo[] DscResourceInfo[] @@ -2073,9 +2164,9 @@ Author - + - + String String @@ -2085,9 +2176,9 @@ Passthru - + - + SwitchParameter SwitchParameter @@ -2097,9 +2188,9 @@ WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter SwitchParameter @@ -2109,9 +2200,9 @@ Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter SwitchParameter @@ -2151,6 +2242,10 @@ Mode LastWriteTime Length Name + + Online Version: + https://bit.ly/3NzEzUd + Get-DSCResource @@ -2178,21 +2273,21 @@ Mode LastWriteTime Length Name New-FileHere Name - + Enter the name of the new file. If you don't specify one you will be prompted. - + String String - (New-Inputbox -Prompt "Enter a file name" -Title "New File" -Default "MyUntitled.ps1") + (New-InputBox -Prompt "Enter a file name" -Title "New File" -Default "MyUntitled.ps1") Open - + - + SwitchParameter @@ -2201,9 +2296,9 @@ Mode LastWriteTime Length Name Passthru - + - + SwitchParameter @@ -2215,21 +2310,21 @@ Mode LastWriteTime Length Name Name - + Enter the name of the new file. If you don't specify one you will be prompted. - + String String - (New-Inputbox -Prompt "Enter a file name" -Title "New File" -Default "MyUntitled.ps1") + (New-InputBox -Prompt "Enter a file name" -Title "New File" -Default "MyUntitled.ps1") Open - + - + SwitchParameter SwitchParameter @@ -2239,9 +2334,9 @@ Mode LastWriteTime Length Name Passthru - + - + SwitchParameter SwitchParameter @@ -2258,7 +2353,12 @@ Mode LastWriteTime Length Name - + + + Online Version: + https://bit.ly/46vYeND + + @@ -2304,28 +2404,33 @@ Mode LastWriteTime Length Name - + + + Online Version: + https://bit.ly/449BGAK + + - New-Inputbox + New-InputBox New - Inputbox + InputBox - Display a Visual Basic style inputbox. + Display a Visual Basic style InputBox. - This function will display a graphical Inputbox, like the one from VisualBasic and VBScript. You must specify a messag prompt. You can specify a title, the default is "Input". You can also specify a default value. The inputbox will write whatever is entered into it to the pipeline. If you click Cancel the inputbox will still write a string to the pipeline with a length of 0. It is recommended that you validate input. + This function will display a graphical InputBox, like the one from VisualBasic and VBScript. You must specify a messag prompt. You can specify a title, the default is "Input". You can also specify a default value. The InputBox will write whatever is entered into it to the pipeline. If you click Cancel the InputBox will still write a string to the pipeline with a length of 0. It is recommended that you validate input. - New-Inputbox + New-InputBox Prompt - + Enter a message prompt - + String String @@ -2335,9 +2440,9 @@ Mode LastWriteTime Length Name Title - + - + String String @@ -2347,9 +2452,9 @@ Mode LastWriteTime Length Name Default - + - + String String @@ -2362,9 +2467,9 @@ Mode LastWriteTime Length Name Prompt - + Enter a message prompt - + String String @@ -2374,9 +2479,9 @@ Mode LastWriteTime Length Name Title - + - + String String @@ -2386,9 +2491,9 @@ Mode LastWriteTime Length Name Default - + - + String String @@ -2425,14 +2530,19 @@ Mode LastWriteTime Length Name -------------------------- EXAMPLE 1 -------------------------- - PS C:\> $c = New-Inputbox -prompt "Enter the Netbios name of a domain computer." -title "Enter a computername" -default $env:computername + PS C:\> $c = New-InputBox -prompt "Enter the Netbios name of a domain computer." -title "Enter a computername" -default $env:computername PS C:\> get-service -computer $c - + + + Online Version: + https://bit.ly/43bAgo3 + + @@ -2453,9 +2563,9 @@ PS C:\> get-service -computer $c New-PSCommand Name - + The name of the new function - + String String @@ -2465,7 +2575,7 @@ PS C:\> get-service -computer $c NewParameters - + A hash table of new parameter values. The key should be the parameter name. The entry value should be the object type. You can also indicate if it should be an array by using [] with the object type. Here's an example: @{Name="string[]";Test="switch";Path="string"} Or you can use an "advanced" version of the hash table to specify optional parameter attributes that follows the format: @@ -2473,7 +2583,7 @@ PS C:\> get-service -computer $c Here's an example: $h = @{Name="string[]",$True,$True,$False,0; Path="string",$false,$false,$false,1; Size="int",$false,$false,$true; Recurse="switch" } You can also specify an ordered hash table if you are running PowerShell v or later. - + Object Object @@ -2483,9 +2593,9 @@ PS C:\> get-service -computer $c Synopsis - + Provide a brief synopsis of your command. - + String String @@ -2495,9 +2605,9 @@ PS C:\> get-service -computer $c Description - + Provide a description for your command. You can always add and edit this later. - + String String @@ -2507,9 +2617,9 @@ PS C:\> get-service -computer $c BeginCode - + A block of code to insert in the Begin scriptblock. This can be either a scriptblock or a string. - + String String @@ -2519,9 +2629,9 @@ PS C:\> get-service -computer $c ProcessCode - + A block of code to insert at the start of the Process scriptblock. This can be either a scriptblock or a string. - + String String @@ -2531,9 +2641,9 @@ PS C:\> get-service -computer $c EndCode - + A block of code to insert at the start of the End scriptblock. This can be either a scriptblock or a string. - + String String @@ -2543,9 +2653,9 @@ PS C:\> get-service -computer $c ShouldProcess - + Set SupportsShouldProcess to True in the new function. - + SwitchParameter @@ -2554,9 +2664,9 @@ PS C:\> get-service -computer $c UseISE - + If you are running this command in the ISE, send the new function to the editor as a new file. - + SwitchParameter @@ -2568,9 +2678,9 @@ PS C:\> get-service -computer $c Name - + The name of the new function - + String String @@ -2580,7 +2690,7 @@ PS C:\> get-service -computer $c NewParameters - + A hash table of new parameter values. The key should be the parameter name. The entry value should be the object type. You can also indicate if it should be an array by using [] with the object type. Here's an example: @{Name="string[]";Test="switch";Path="string"} Or you can use an "advanced" version of the hash table to specify optional parameter attributes that follows the format: @@ -2588,7 +2698,7 @@ PS C:\> get-service -computer $c Here's an example: $h = @{Name="string[]",$True,$True,$False,0; Path="string",$false,$false,$false,1; Size="int",$false,$false,$true; Recurse="switch" } You can also specify an ordered hash table if you are running PowerShell v or later. - + Object Object @@ -2598,9 +2708,9 @@ PS C:\> get-service -computer $c ShouldProcess - + Set SupportsShouldProcess to True in the new function. - + SwitchParameter SwitchParameter @@ -2610,9 +2720,9 @@ PS C:\> get-service -computer $c Synopsis - + Provide a brief synopsis of your command. - + String String @@ -2622,9 +2732,9 @@ PS C:\> get-service -computer $c Description - + Provide a description for your command. You can always add and edit this later. - + String String @@ -2634,9 +2744,9 @@ PS C:\> get-service -computer $c BeginCode - + A block of code to insert in the Begin scriptblock. This can be either a scriptblock or a string. - + String String @@ -2646,9 +2756,9 @@ PS C:\> get-service -computer $c ProcessCode - + A block of code to insert at the start of the Process scriptblock. This can be either a scriptblock or a string. - + String String @@ -2658,9 +2768,9 @@ PS C:\> get-service -computer $c EndCode - + A block of code to insert at the start of the End scriptblock. This can be either a scriptblock or a string. - + String String @@ -2670,9 +2780,9 @@ PS C:\> get-service -computer $c UseISE - + If you are running this command in the ISE, send the new function to the editor as a new file. - + SwitchParameter SwitchParameter @@ -2799,9 +2909,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Open-SelectedISE Text - + - + String String @@ -2814,9 +2924,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Text - + - + String String @@ -2875,9 +2985,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Out-ISETab InputObject - + - + Object[] Object[] @@ -2887,9 +2997,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg UseCurrentFile - + Insert the text into the current ISE tab. - + SwitchParameter @@ -2901,9 +3011,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg InputObject - + - + Object[] Object[] @@ -2913,9 +3023,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg UseCurrentFile - + Insert the text into the current ISE tab. - + SwitchParameter SwitchParameter @@ -2964,9 +3074,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Remove-ISEBookmark Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter @@ -2975,9 +3085,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter @@ -2989,9 +3099,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Confirm - + Prompts you for confirmation before running the cmdlet. - + SwitchParameter SwitchParameter @@ -3001,9 +3111,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg WhatIf - + Shows what would happen if the cmdlet runs. The cmdlet is not run. - + SwitchParameter SwitchParameter @@ -3113,9 +3223,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Send-ToPrinter path - + - + String String @@ -3128,9 +3238,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg path - + - + String String @@ -3240,9 +3350,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Start-MyScript Path - + - + String String @@ -3255,9 +3365,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Path - + - + String String @@ -3316,9 +3426,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Update-ISEBookmark Bookmark - + - + Object Object @@ -3331,9 +3441,9 @@ PS C:\> New-PSCommand -Name Get-UserData -NewParameters $hash -BeginCode $beg Bookmark - + - + Object Object diff --git a/functions/Bookmarks.ps1 b/functions/Bookmarks.ps1 index 51a65af..705bfad 100644 --- a/functions/Bookmarks.ps1 +++ b/functions/Bookmarks.ps1 @@ -2,13 +2,13 @@ #create a script bookmarking system for the PowerShell ISE Function Get-ISEBookmark { - [cmdletbinding()] + [CmdletBinding()] Param() Write-Verbose "Importing bookmarks from $MyBookmarks" Try { - Import-CSV $MyBookmarks -ErrorAction Stop | - Out-GridView -Title "My ISE Bookmarks" -OutputMode Single + Import-Csv $MyBookmarks -ErrorAction Stop | + Out-GridView -Title 'My ISE Bookmarks' -OutputMode Single } Catch { Write-Warning "Failed to find or import bookmarks from $($MyBookmarks). Does file exist?" @@ -16,7 +16,7 @@ Function Get-ISEBookmark { } #close Get-ISEBookmark Function Open-ISEBookmark { - [cmdletbinding()] + [CmdletBinding()] Param() $bookmark = Get-ISEBookmark @@ -25,13 +25,13 @@ Function Open-ISEBookmark { Write-Verbose "Processing bookmark $($bookmark.name) for $($bookmark.path)" #open the file - psedit $bookmark.path + Open-EditorFile $bookmark.path #find the file in the collection of open files - $search = $psise.CurrentPowerShellTab.files.where( {$_.fullpath -eq $bookmark.path}) + $search = $psISE.CurrentPowerShellTab.files.where( { $_.FullPath -eq $bookmark.path }) #make the file the currently selected - $psise.CurrentPowerShellTab.files.SelectedFile = $search[0] + $psISE.CurrentPowerShellTab.files.SelectedFile = $search[0] #jump to the bookmark location Write-Verbose "Jumping to line $($Bookmark.LineNumber)" @@ -41,14 +41,14 @@ Function Open-ISEBookmark { } #close Open-ISEBookmark Function Remove-ISEBookmark { - [cmdletbinding(SupportsShouldProcess)] + [CmdletBinding(SupportsShouldProcess)] Param() $bookmark = Get-ISEBookmark if ($bookmark) { Write-Verbose "Processing bookmark $($bookmark.name) for $($bookmark.path)" - $save = Import-CSV -Path $MyBookmarks | where {$_.id -notmatch $bookmark.id} + $save = Import-Csv -Path $MyBookmarks | Where-Object { $_.id -notmatch $bookmark.id } Write-Verbose "Updating $MyBookmarks" $save | Export-Csv -Path $MyBookmarks -Encoding ASCII @@ -57,7 +57,7 @@ Function Remove-ISEBookmark { } #close Remove-ISEBookmark Function Update-ISEBookmark { - [cmdletbinding()] + [CmdletBinding()] Param( [Parameter(Position = 0, ValueFromPipeline)] [object]$Bookmark @@ -67,26 +67,26 @@ Function Update-ISEBookmark { if ($bookmark) { Write-Verbose "Processing bookmark $($bookmark.name) for $($bookmark.path)" - $line = New-Inputbox -Prompt "Enter the line number" -Title $MyInvocation.MyCommand -Default $Bookmark.LineNumber + $line = New-Inputbox -Prompt 'Enter the line number' -Title $MyInvocation.MyCommand -Default $Bookmark.LineNumber if ($line) { - $name = New-Inputbox -Prompt "Enter the name" -Title $MyInvocation.MyCommand -Default $Bookmark.name + $name = New-Inputbox -Prompt 'Enter the name' -Title $MyInvocation.MyCommand -Default $Bookmark.name } else { #nothing entered so bail out - Write-Verbose "Cancelling" + Write-Verbose 'Cancelling' Return } If ($name) { #get all bookmarks - $all = Get-content -Path $MyBookmarks | ConvertFrom-Csv + $all = Get-Content -Path $MyBookmarks | ConvertFrom-Csv #get matching bookmark by ID from CSV file - $bmk = $all.where( {$_.id -eq $bookmark.id}) + $bmk = $all.where( { $_.id -eq $bookmark.id }) #update the entry - $bmk[0].Linenumber = $line + $bmk[0].LineNumber = $line $bmk[0].name = $name #save the results back to the file @@ -94,7 +94,7 @@ Function Update-ISEBookmark { } else { #cancelling - Write-Verbose "Cancelling" + Write-Verbose 'Cancelling' } } #close if bookmark @@ -102,11 +102,11 @@ Function Update-ISEBookmark { Function Add-ISEBookmark { - $line = $psise.CurrentFile.Editor.CaretLine - $path = $psise.CurrentFile.FullPath - $name = New-Inputbox -Prompt "Enter a name or description for this bookmark." -Title "Add ISE Bookmark" + $line = $psISE.CurrentFile.Editor.CaretLine + $path = $psISE.CurrentFile.FullPath + $name = New-Inputbox -Prompt 'Enter a name or description for this bookmark.' -Title 'Add ISE Bookmark' - $obj = [pscustomobject]@{ + $obj = [PSCustomObject]@{ ID = [guid]::NewGuid().guid LineNumber = $line Name = $name diff --git a/functions/CIMScriptMaker.ps1 b/functions/CIMScriptMaker.ps1 index 20e8963..ca10821 100644 --- a/functions/CIMScriptMaker.ps1 +++ b/functions/CIMScriptMaker.ps1 @@ -1,18 +1,18 @@ Function New-CIMCommand { - Param([string]$computername = $env:COMPUTERNAME) + Param([String]$computername = $env:COMPUTERNAME) Function Get-Namespace { #this function will recursively enumerate namespaces Param( - [string]$Namespace = "Root", + [String]$Namespace = 'Root', [Microsoft.Management.Infrastructure.CimSession]$CimSession ) - $nspaces = $cimsession | Get-CimInstance -Namespace $Namespace -ClassName __Namespace - foreach ($nspace in $nspaces) { + $nSpaces = $CimSession | Get-CimInstance -Namespace $Namespace -ClassName __Namespace + foreach ($nSpace in $nSpaces) { $child = Join-Path -Path $Namespace -ChildPath $nspace.Name $child @@ -20,45 +20,45 @@ Function New-CIMCommand { } } - #create a CIMSession - $cimsess = New-CimSession -ComputerName $computername + #create a CimSession + $cimSess = New-CimSession -ComputerName $computername #browse namespaces - Write-Host "Enumerating namspaces on $computername....please wait..." -ForegroundColor Cyan + Write-Host "Enumerating namespaces on $computername....please wait..." -ForegroundColor Cyan $ns = Get-Namespace -CimSession $cimsess | Sort-Object | - Out-GridView -Title "$($cimsess.Computername): Select a namespace" -OutputMode Single + Out-GridView -Title "$($cimsess.Computername): Select a namespace" -OutputMode Single if ($ns) { #get classes filtering out system classes - Write-Host "Enumerating classes...please wait..." -ForegroundColor Cyan + Write-Host 'Enumerating classes...please wait...' -ForegroundColor Cyan $class = $cimsess | Get-CimClass -Namespace $ns | - Where-Object {$_.cimclassname -notmatch "^__" -AND $_.CimClassProperties.Name -notcontains "Antecedent"} | - Sort-Object CimClassName | Select-Object CimClassName, CimClassProperties | - Out-GridView -Title "$NS : Select a class name" -OutputMode Single + Where-Object { $_.cimClassName -notmatch '^__' -AND $_.CimClassProperties.Name -notcontains 'Antecedent' } | + Sort-Object CimClassName | Select-Object CimClassName, CimClassProperties | + Out-GridView -Title "$NS : Select a class name" -OutputMode Single } if ($class) { #create a VBScript message box - $wshell = New-Object -ComObject "Wscript.Shell" - $r = $wshell.Popup("Do you want to test this class?", -1, $class.CimClassname, 32 + 4) + $wshell = New-Object -ComObject 'Wscript.Shell' + $r = $wshell.Popup('Do you want to test this class?', -1, $class.CimClassName, 32 + 4) if ($r -eq 6) { #Yes $test = $cimsess | Get-CimInstance -Namespace $ns -ClassName $class.CimClassName if ($test) { $test | Out-GridView -Title "$NS\$($Class.cimClassName)" -Wait - $prompt = "Do you want to continue?" + $prompt = 'Do you want to continue?' $icon = 32 + 4 } else { - $prompt = "No results were returned. Do you want to continue?" + $prompt = 'No results were returned. Do you want to continue?' $icon = 16 + 4 } - $r = $wshell.Popup($prompt, -1, $class.CimClassname, $icon) + $r = $wshell.Popup($prompt, -1, $class.CimClassName, $icon) if ($r -eq 7) { - Write-Host "Exiting. Please try again later." -ForegroundColor Yellow + Write-Host 'Exiting. Please try again later.' -ForegroundColor Yellow #bail out Return } @@ -66,34 +66,34 @@ Function New-CIMCommand { } #if r = 6 #define basic command - $cmd = "Get-CimInstance @cimParam" + $cmd = 'Get-CimInstance @cimParam' #create a filter - $filterProperty = $class.CimClassProperties | Select-Object Name, CimType, Flags | - Out-GridView -Title "Select a property to filter on or cancel to not filter." -OutputMode Single + $FilterProperty = $class.CimClassProperties | Select-Object Name, CimType, Flags | + Out-GridView -Title 'Select a property to filter on or cancel to not filter.' -OutputMode Single - if ($filterProperty) { - $operator = "=", "<", ">", "<>", ">=", "<=", "like" | - Out-GridView -Title "Select an operator. Default if you cancel is =" -OutputMode Single + if ($FilterProperty) { + $operator = '=', '<', '>', '<>', '>=', '<=', 'like' | + Out-GridView -Title 'Select an operator. Default if you cancel is =' -OutputMode Single - #create a VBSCript inputbox - Add-Type -AssemblyName "microsoft.visualbasic" -ErrorAction Stop + #create a VBScript InputBox + Add-Type -AssemblyName 'Microsoft.VisualBasic' -ErrorAction Stop $Prompt = "Enter a value for your filter. If using a string, wrap the value in ''. If using Like, use % as the wildcard character." - $title = "-filter ""$($filterproperty.Name) $operator ?""" - $value = [microsoft.visualbasic.interaction]::InputBox($Prompt, $Title) + $title = "-filter ""$($FilterProperty.Name) $operator ?""" + $value = [Microsoft.VisualBasic.interaction]::InputBox($Prompt, $Title) - $filter = "-filter ""$($filterproperty.Name) $operator $value""" + $filter = "-filter ""$($FilterProperty.Name) $operator $value""" $cmd += " $filter" - } #if filterproperty + } #if FilterProperty #show properties - Write-Host "Getting class properties" -ForegroundColor Cyan + Write-Host 'Getting class properties' -ForegroundColor Cyan $properties = $class.CimClassProperties | Select-Object Name, CimType, Flags | - Out-Gridview -Title "$($class.CimClassName) : Select one or more properties. Cancel will select *" -PassThru + Out-GridView -Title "$($class.CimClassName) : Select one or more properties. Cancel will select *" -PassThru if ($properties) { - $select = $properties.name -join "," + $select = $properties.name -join ',' $cmd += @" | Select-Object -property $select,PSComputername @@ -104,7 +104,7 @@ Function New-CIMCommand { #define a name for the function using the class name #remove _ from class name - $cname = $class.CimClassName.Replace("_", "") + $cname = $class.CimClassName.Replace('_', '') $cmdName = "Get-$cname" #the auto-generated PowerShell code @@ -129,9 +129,9 @@ PS C:\> $cmdName Run the command defaulting to the local computername. .Example -PS C:\> Get-CimSession | $cmdName | Out-Gridview -title $cmdName +PS C:\> Get-CimSession | $cmdName | Out-GridView -title $cmdName -Get all CIMSessions and pipe them to this command sending results to Out-Gridview. +Get all CimSessions and pipe them to this command sending results to Out-GridView. .Notes Version : 1.0 Author : $($env:userdomain)\$($env:username) @@ -145,11 +145,11 @@ Get-CimInstance Get-CimSession #> -[cmdletbinding(DefaultParameterSetName="Computer")] +[CmdletBinding(DefaultParameterSetName="Computer")] Param( -[Parameter(Position=0,ValueFromPipelinebyPropertyName=`$True, +[Parameter(Position=0,ValueFromPipelineByPropertyName=`$True, ParameterSetName="Computer")] -[ValidateNotNullorEmpty()] +[ValidateNotNullOrEmpty()] [Alias("CN","Host")] [string[]]`$Computername=`$env:Computername, @@ -160,36 +160,36 @@ ParameterSetName="Session")] ) Begin { - Write-Verbose "Starting command `$(`$MyInvocation.Mycommand)" - #create a hashtable of parameters to splat against Get-CimInstance - `$cimParam=@{ - Namespace = "$NS" - ClassName = "$($Class.CimClassName) " - ErrorAction = "Stop" - } + Write-Verbose "Starting command `$(`$MyInvocation.MyCommand)" + #create a hashtable of parameters to splat against Get-CimInstance + `$cimParam=@{ + Namespace = "$NS" + ClassName = "$($Class.CimClassName) " + ErrorAction = "Stop" + } } #begin Process { - if (`$computername) { - `$cimParam.Computername=`$computername - Write-Verbose "Processing `$Computername" - } - else { - #must be a cimsession - `$cimParam.CIMSession=`$CimSession - Write-Verbose "Processing `$(`$CimSession.ComputerName)" - } - - Try { - $cmd - } #try - Catch { - Write-Warning "Failed to retrieve information. `$(`$_.Exception.Message)" - } #catch + if (`$computername) { + `$cimParam.Computername=`$computername + Write-Verbose "Processing `$Computername" + } + else { + #must be a CimSession + `$cimParam.CimSession=`$CimSession + Write-Verbose "Processing `$(`$CimSession.ComputerName)" + } + + Try { + $cmd + } #try + Catch { + Write-Warning "Failed to retrieve information. `$(`$_.Exception.Message)" + } #catch } #Process End { - Write-Verbose "Ending command `$(`$MyInvocation.Mycommand)" + Write-Verbose "Ending command `$(`$MyInvocation.MyCommand)" } #end } #end function @@ -197,7 +197,7 @@ End { $myScript | Out-ISETab - #remove the cimsession + #remove the CimSession $cimsess | Remove-CimSession -} #end function \ No newline at end of file +} #end function diff --git a/functions/CloseAllFiles.ps1 b/functions/CloseAllFiles.ps1 index 2c94368..7db72e1 100644 --- a/functions/CloseAllFiles.ps1 +++ b/functions/CloseAllFiles.ps1 @@ -1,14 +1,14 @@ - + #close all saved files in the ISE Function CloseAllFiles { - [cmdletbinding()] + [CmdletBinding()] Param() - $saved = $psISE.CurrentPowerShellTab.Files.Where( {$_.isSaved}) + $saved = $psISE.CurrentPowerShellTab.Files.Where( { $_.isSaved }) foreach ($file in $saved) { - write-Verbose "closing $($file.FullPath)" + Write-Verbose "closing $($file.FullPath)" [void]$psISE.CurrentPowerShellTab.files.Remove($file) } @@ -16,13 +16,13 @@ Function CloseAllFiles { #close all other saved files except for the active file Function CloseAllFilesButCurrent { - [cmdletbinding()] + [CmdletBinding()] Param() - $saved = $psISE.CurrentPowerShellTab.Files.Where( {$_.isSaved -AND $_.fullpath -ne $psISE.CurrentFile.FullPath }) + $saved = $psISE.CurrentPowerShellTab.Files.Where( { $_.isSaved -AND $_.FullPath -ne $psISE.CurrentFile.FullPath }) foreach ($file in $saved) { - write-Verbose "closing $($file.FullPath)" - [void]$psISE.CurrentPowerShellTab.files.Remove($file) + Write-Verbose "closing $($file.FullPath)" + [void]$psISE.CurrentPowerShellTab.files.Remove($file) } -} #end function \ No newline at end of file +} #end function diff --git a/functions/Convert-AliasDefinition.ps1 b/functions/Convert-AliasDefinition.ps1 index 8c78e4b..4521fcb 100644 --- a/functions/Convert-AliasDefinition.ps1 +++ b/functions/Convert-AliasDefinition.ps1 @@ -1,26 +1,23 @@ - - Function Convert-AliasDefinition { - - [cmdletBinding(DefaultParameterSetName = "ToDefinition")] + [CmdletBinding(DefaultParameterSetName = 'ToDefinition')] Param( - [Parameter(Position = 0, Mandatory = $True, HelpMessage = "Enter a string to convert")] - [string]$Text, - [Parameter(ParameterSetName = "ToAlias")] - [switch]$ToAlias, - [Parameter(ParameterSetName = "ToDefinition")] - [switch]$ToDefinition + [Parameter(Position = 0, Mandatory, HelpMessage = 'Enter a string to convert')] + [String]$Text, + [Parameter(ParameterSetName = 'ToAlias')] + [Switch]$ToAlias, + [Parameter(ParameterSetName = 'ToDefinition')] + [Switch]$ToDefinition ) #make sure we are using the ISE - if ($host.name -match "ISE") { + if ($host.name -match 'ISE') { Try { #get alias if it exists otherwise throw an exception that #will be caught if ($ToAlias) { #get alias by definition and convert to name - $alias = get-alias -definition $Text -ErrorAction Stop + $alias = Get-Alias -Definition $Text -ErrorAction Stop #there might be multiples so use the first one found if ($alias -is [array]) { $replace = $alias[0].name @@ -34,11 +31,11 @@ Function Convert-AliasDefinition { #if the text is ?, this is a special character so #we'll just assume it is Where-Object - if ($Text -eq "?") { - $Replace = "Where-Object" + if ($Text -eq '?') { + $Replace = 'Where-Object' } else { - $alias = Get-Alias -name $Text -ErrorAction Stop + $alias = Get-Alias -Name $Text -ErrorAction Stop $replace = $alias.definition } } #Else ToDefinition @@ -51,13 +48,13 @@ Function Convert-AliasDefinition { #make changes if an alias was found If ($replace) { - #Insert the replacment - $psise.currentfile.editor.insertText($replace) + #Insert the replacement + $psISE.CurrentFile.editor.insertText($replace) } } #if ISE else { - Write-Warning "You must be using the PowerShell ISE" + Write-Warning 'You must be using the PowerShell ISE' } } #end function diff --git a/functions/Convert-CodetoSnippet.ps1 b/functions/Convert-CodetoSnippet.ps1 index 0244e7e..b2b186c 100644 --- a/functions/Convert-CodetoSnippet.ps1 +++ b/functions/Convert-CodetoSnippet.ps1 @@ -1,31 +1,29 @@ - - -Function Convert-CodetoSnippet { - [cmdletbinding(SupportsShouldProcess)] - [alias("ccs")] +Function Convert-CodeToSnippet { + [CmdletBinding(SupportsShouldProcess)] + [alias('ccs')] Param( - [Parameter(Position = 0, Mandatory = $True, - HelpMessage = "Enter some code text or break, select text in the ISE and try again.")] - [ValidateNotNullorEmpty()] - [string]$Text + [Parameter(Position = 0, Mandatory, + HelpMessage = 'Enter some code text or break, select text in the ISE and try again.')] + [ValidateNotNullOrEmpty()] + [String]$Text ) - Add-Type -AssemblyName "Microsoft.VisualBasic" + Add-Type -AssemblyName 'Microsoft.VisualBasic' - $title = [Microsoft.VisualBasic.Interaction]::InputBox("Enter a title for your snippet", $MyInvocation.mycommand.name) + $title = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a title for your snippet', $MyInvocation.MyCommand.name) if ($title) { - $description = [Microsoft.VisualBasic.Interaction]::InputBox("Enter a description for your snippet", $MyInvocation.mycommand.name, "This is required") + $description = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a description for your snippet', $MyInvocation.MyCommand.name, 'This is required') if ($description) { - $author = [Microsoft.VisualBasic.Interaction]::InputBox("Enter an author for your snippet", $MyInvocation.mycommand.name, $env:username) + $author = [Microsoft.VisualBasic.Interaction]::InputBox('Enter an author for your snippet', $MyInvocation.MyCommand.name, $env:username) if (!$author) { - $author = " " + $author = ' ' } #if author } #if description else { #if no description assume user cancelled - Write-Warning -Message "No description was specified. Operation cancelled." + Write-Warning -Message 'No description was specified. Operation cancelled.' Return } @@ -35,13 +33,13 @@ Function Convert-CodetoSnippet { } Catch { $message = ("There was an error creating the snippet. `n`n{0} `n`nDo you want to force an overwrite?" -f $_.exception.message) - $returnValue = [microsoft.visualbasic.interaction]::Msgbox($message, "YesNo,Exclamation", $MyInvocation.MyCommand.name) - if ($returnValue -eq "yes") { + $returnValue = [Microsoft.VisualBasic.interaction]::MsgBox($message, 'YesNo,Exclamation', $MyInvocation.MyCommand.name) + if ($returnValue -eq 'yes') { #re-run the command but this time with -Force New-IseSnippet -Title $title -Text $Text -description $Description -author $Author -Force } } - } #shouldprocess + } #ShouldProcess } } #end Convert-CodeToSnippet diff --git a/functions/Convert-CommandToHash.ps1 b/functions/Convert-CommandToHash.ps1 index f448171..02ba532 100644 --- a/functions/Convert-CommandToHash.ps1 +++ b/functions/Convert-CommandToHash.ps1 @@ -1,24 +1,24 @@ - + #Convert the named parameter part of a command into a hash table in the ISE -Function Convert-CommandtoHash { - [cmdletbinding()] +Function Convert-CommandToHash { + [CmdletBinding()] Param( - [ValidateNotNullorEmpty()] - [string]$Text = $psise.currentfile.editor.SelectedText + [ValidateNotNullOrEmpty()] + [String]$Text = $psISE.CurrentFile.editor.SelectedText ) Set-StrictMode -Version latest - New-Variable astTokens -force - New-Variable astErr -force + New-Variable $AstTokens -Force + New-Variable astErr -Force - Write-verbose "Converting $text" + Write-Verbose "Converting $text" - $ast = [System.Management.Automation.Language.Parser]::ParseInput($Text, [ref]$astTokens, [ref]$astErr) + $AST = [System.Management.Automation.Language.Parser]::ParseInput($Text, [ref]$AstTokens, [ref]$astErr) #resolve the command name - $cmdType = Get-Command $asttokens[0].text + $cmdType = Get-Command $AstTokens[0].text if ($cmdType.CommandType -eq 'Alias') { $cmd = $cmdType.ResolvedCommandName } @@ -27,41 +27,41 @@ Function Convert-CommandtoHash { } Write-Verbose "Command is $cmd" - Write-Verbose ($astTokens | out-string) + Write-Verbose ($AstTokens | Out-String) #last item is end of input token - $r = for ($i = 1; $i -lt $astTokens.count - 2 ; $i++) { - if ($astTokens[$i].ParameterName) { - $p = $astTokens[$i].ParameterName - write-verbose "Parameter name = $p" - write-verbose ($astTokens[$i] | out-string) - $v = "" + $r = for ($i = 1; $i -lt $AstTokens.count - 2 ; $i++) { + if ($AstTokens[$i].ParameterName) { + $p = $AstTokens[$i].ParameterName + Write-Verbose "Parameter name = $p" + Write-Verbose ($AstTokens[$i] | Out-String) + $v = '' #check next token - if ($astTokens[$i + 1].Kind -match 'Parameter|NewLine|EndOfInput') { + if ($AstTokens[$i + 1].Kind -match 'Parameter|NewLine|EndOfInput') { #the parameter must be a switch $v = "`$True" } else { - While ($astTokens[$i + 1].Kind -notmatch 'Parameter|NewLine|EndOfInput') { + While ($AstTokens[$i + 1].Kind -notmatch 'Parameter|NewLine|EndOfInput') { #break out of loop if there is no text - write-verbose "While: $($astTokens[$i])" + Write-Verbose "While: $($AstTokens[$i])" $i++ #test if value is a string and if it is quoted, if not include quotes - if ($astTokens[$i].Text -match "\D" -AND $astTokens[$i].Text -notmatch """\w+.*""" -AND $astTokens[$i].Text -notmatch "'\w+.*'") { + if ($AstTokens[$i].Text -match '\D' -AND $AstTokens[$i].Text -notmatch '"\w+.*"' -AND $AstTokens[$i].Text -notmatch "'\w+.*'") { #ignore commas and variables - if ($astTokens[$i].Kind -match 'Comma|Variable') { - $value = $astTokens[$i].Text + if ($AstTokens[$i].Kind -match 'Comma|Variable') { + $value = $AstTokens[$i].Text } else { #Assume text and quote it - Write-Verbose "Quoting $($astTokens[$i].Text)" - $value = "'$($astTokens[$i].Text)'" + Write-Verbose "Quoting $($AstTokens[$i].Text)" + $value = "'$($AstTokens[$i].Text)'" } } else { - Write-Verbose "Using text as is for $($astTokens[$i].Text)" - $value = $astTokens[$i].Text + Write-Verbose "Using text as is for $($AstTokens[$i].Text)" + $value = $AstTokens[$i].Text } Write-Verbose "Adding $Value to `$v" @@ -75,11 +75,11 @@ Function Convert-CommandtoHash { } #for - Write-Verbose "Finished processing AST" - Write-verbose ($r | out-string) + Write-Verbose 'Finished processing AST' + Write-Verbose ($r | Out-String) #create text - $hashtext = @" + $HashText = @" `$paramHash = @{ $r} @@ -87,7 +87,7 @@ $cmd @paramHash "@ #insert the text which should replace the highlighted line - $psise.CurrentFile.Editor.InsertText($hashtext) + $psISE.CurrentFile.Editor.InsertText($HashText) } diff --git a/functions/Convert-ISEComment.ps1 b/functions/Convert-ISEComment.ps1 index 12dc87b..a54af68 100644 --- a/functions/Convert-ISEComment.ps1 +++ b/functions/Convert-ISEComment.ps1 @@ -1,16 +1,16 @@ - + #convert selected text into a multi-line comment Function ConvertTo-MultiLineComment { - [cmdletbinding()] - Param([string]$Text = $psise.CurrentFile.Editor.SelectedText) + [CmdletBinding()] + Param([String]$Text = $psISE.CurrentFile.Editor.SelectedText) - if ($text -match "^<#" -AND $text -match "#>$") { - Write-Warning "Selected text already appears to be a multiline comment" + if ($text -match '^<#' -AND $text -match '#>$') { + Write-Warning 'Selected text already appears to be a multiline comment' } - elseif ($text -match "^#") { + elseif ($text -match '^#') { #strip off # in text - $text = $text.Replace("#", "") + $text = $text.Replace('#', '') $replace = "<#`n$text`n#>" } @@ -24,28 +24,28 @@ $Text } #else if ($replace) { - $psise.currentfile.editor.InsertText($replace) + $psISE.CurrentFile.editor.InsertText($replace) } } #end function Function ConvertFrom-MultiLineComment { - [cmdletbinding()] - Param([string]$Text = $psise.CurrentFile.Editor.SelectedText) + [CmdletBinding()] + Param([String]$Text = $psISE.CurrentFile.Editor.SelectedText) #trim off leading and trailing spaces $MyText = $Text.Trim() - if ($MyText.StartsWith("<#") -AND $MyText.EndsWith("#>")) { + if ($MyText.StartsWith('<#') -AND $MyText.EndsWith('#>')) { #get everything between the first 2 and last 2 characters $replace = $myText.Substring(2, $MyText.length - 4) #insert a #character [string[]]$newText = $replace.split("`n") | - select -Skip 1 -First ($MyText.Split("`n").count - 2) | foreach {("#$_").Trim()} - $psise.currentfile.editor.InsertText(($newtext.trim() | out-string)) + Select-Object -Skip 1 -First ($MyText.Split("`n").count - 2) | ForEach-Object { ("#$_").Trim() } + $psISE.CurrentFile.editor.InsertText(($newText.trim() | Out-String)) } else { - Write-Warning "Could not detect that selected text is a multiline comment" + Write-Warning 'Could not detect that selected text is a multiline comment' } } #end function diff --git a/functions/ConvertAll.ps1 b/functions/ConvertAll.ps1 index 082dd4137da821165148f297db72d695bba9ff3b..20fcea026f9f738153778b9e98fdc2d5eca6ee28 100644 GIT binary patch literal 1401 zcmb7EQE%EX5Ps)ZTuYD>iJ1D}jBUU9toMa|bZj!eaUj^->uG_7Sah)p#Yi zLBrY)h?)~(Mmgy_7l$3pOVpTtS^mPz!WN>RO*N@(Q*bfaEd~tsft4#+D2<%B!~qk8 zgai61Gnd-$(hF(6L`%%4g<4!b1mZv)Jgz56Jb61_EZuUJ?iNuJHRL@PIu60JG&z6z365X)D`NH)R~65k&fAN9 zps{_kXOI?+5*~JV*c>gFbf`LL-*{?DSX1qh5nf5UEtR+K?o`^hyFK)q{v8|IFUiCe zf>~iEcm70C+4la_dwRWe4sIXN%S{ZuvqiKj; zQD}s@pqVog(zu~UW{lqS*TN#lhv6Xs-aV{%JkD+M|=_%fvWFp7V;Lb8wF<39K zm;O)jMZE@|5--Im*?Fgy>)6}deQxa-%Qt9Y98{{gLnfS^0d)g^Q@OAn7t+R=M2ohz zFw)B*R*fX`T0X#XT4Kb-Mz!nMwO-J(mYm_4BSu7$+7fw*vA|FL8~~viPT=|)>!D?; zF~xc)E%cC#@N@LA8aLJ3kWGM~i@irM)aT7^^k8F zV$%U?8J2Y8mXk^4K`(a3}XQYdNeI>R89=44U4<{uMY%E-16N zs1?_Hh-~EuGl}(*ITw#5>&yO1tTMV>R{N?()+0q$>yv)BEPK^zm!1C;?L)stu&rG2 z>zM3vvFs}`Za`0%jnop;)UX^Tt9g5{=B_X@W@HZQtyUst1!L5~-_?49dJxlj8y2&o z)YVM&sg7rHmic_Es(bO8swdu+AFp3?HNLre{tJR9mP5xji!VyI zN8G2sN0Ht*6z_g&HIm`o!5)G)p(*7#?{#(_@s30H3{m}ayVJ=sPnk2Z3`mhh?38$i zw~<5PPTkkW8oM;tFSYTuu=1||b2W)KsMf1^eXGA2*>jY89#RJb4H5)+FBiQYpog-Q)(VIr=9?Wp3+@c2l8EF1pTcMvAxb J1UiEb`ZwC9m_Gmj diff --git a/functions/ConvertFrom-Alias.ps1 b/functions/ConvertFrom-Alias.ps1 index 5b50c84..bc30e43 100644 --- a/functions/ConvertFrom-Alias.ps1 +++ b/functions/ConvertFrom-Alias.ps1 @@ -1,18 +1,16 @@ - - Function ConvertFrom-Alias { - + [CmdletBinding()] Param ( [Parameter(Position = 0)] - [ValidateNotNullorEmpty()] + [ValidateNotNullOrEmpty()] $Text = $psISE.CurrentFile.Editor.text ) #make sure we are using the ISE - if ($host.name -match "ISE") { + if ($host.name -match 'ISE') { #Turn the script into syntax tokens - Write-Verbose "Tokenizing" + Write-Verbose 'Tokenizing' #verify there are no syntax errors first by Tokenizing the script $out = $null @@ -23,21 +21,21 @@ Function ConvertFrom-Alias { #enumerate each parsing error in $out foreach ($problem in $out) { Write-Warning $problem.message - Write-Warning "Line: $($problem.Token.Startline) at character: $($problem.token.StartColumn)" + Write-Warning "Line: $($problem.Token.StartLine) at character: $($problem.token.StartColumn)" } } else { #if no errors then proceed to convert - $tokens | Where-Object { $_.Type -eq 'Command'} | - Sort-Object StartLine, StartColumn -Descending | - ForEach-Object { + $tokens | Where-Object { $_.Type -eq 'Command' } | + Sort-Object StartLine, StartColumn -Descending | + ForEach-Object { #handle the ? by escaping it if ($_.content -eq '?') { - Write-Verbose "Found a ?" - $result = Get-Command -name '`?' -CommandType Alias + Write-Verbose 'Found a ?' + $result = Get-Command -Name '`?' -CommandType Alias } else { - $result = Get-Command -name $_.Content -CommandType Alias -ErrorAction SilentlyContinue + $result = Get-Command -Name $_.Content -CommandType Alias -ErrorAction SilentlyContinue } #check and see if Get-Command returned anything @@ -51,9 +49,9 @@ Function ConvertFrom-Alias { } #else $tokens exists and there were no parsing errors } #if ISE else { - Write-Warning "You must be using the PowerShell ISE" + Write-Warning 'You must be using the PowerShell ISE' } - Write-Verbose "Finished" + Write-Verbose 'Finished' } #end Function diff --git a/functions/ConvertTo-CommentHelp.ps1 b/functions/ConvertTo-CommentHelp.ps1 index 7735872..0567480 100644 --- a/functions/ConvertTo-CommentHelp.ps1 +++ b/functions/ConvertTo-CommentHelp.ps1 @@ -1,19 +1,17 @@ - - Function ConvertTo-CommentHelp { - [cmdletbinding()] + [CmdletBinding()] Param() - Add-Type -AssemblyName "microsoft.visualbasic" -ErrorAction Stop - $Prompt = "Enter the name of a cmdlet. Leave blank to cancel" - $Default = "" + Add-Type -AssemblyName 'Microsoft.VisualBasic' -ErrorAction Stop + $Prompt = 'Enter the name of a cmdlet. Leave blank to cancel' + $Default = '' $Title = $MyInvocation.MyCommand.Name - [string]$command = [microsoft.visualbasic.interaction]::InputBox($Prompt, $Title, $Default) + [String]$command = [Microsoft.VisualBasic.interaction]::InputBox($Prompt, $Title, $Default) if ($command) { Try { - $help = get-help -Name $command -full -errorAction Stop + $help = Get-Help -Name $command -Full -ErrorAction Stop } Catch { Throw $_ @@ -38,24 +36,24 @@ $(foreach ($param in $help.parameters.parameter) { "`n" }) .Inputs -$(($help.inputTypes | out-string).trim()) +$(($help.inputTypes | Out-String).trim()) .Outputs -$(($help.returnValues | out-string).trim()) +$(($help.returnValues | Out-String).trim()) .Notes -$($help.alertSet.alert | foreach {"$($_.text)`n"}) +$($help.alertSet.alert | ForEach-Object {"$($_.text)`n"}) $(foreach ($item in $help.examples.example) { ".Example`n" $($item.code) "`n" - $(($item.remarks| out-string).trimEnd()) + $(($item.remarks| Out-String).trimEnd()) "`n" }) .Link -$(($help.relatedLinks | out-string).Trim()) +$(($help.relatedLinks | Out-String).Trim()) #> "@ $myHelp | Out-ISETab } #if $help -} \ No newline at end of file +} diff --git a/functions/ConvertTo-TextFile.ps1 b/functions/ConvertTo-TextFile.ps1 index e1d80b0d2e6502de72071f25695f5807e73603f4..d6a03aaf04da4d8517a6282b9fb25bd740dec49f 100644 GIT binary patch literal 676 zcmY+C!ES>v42JJKg{2|^(m>h+?9f%Kv>O^|Jxo1hU`nJkVM!>RroQ_Ur<9fp!LdL8 z{_%E{jpa(hM#&RuTdTarv)yum@E3u5zBb2Jpnc`CN*rmSk>w(0lr z2MWbnif0kMR*uWNUziY>M&J@`kMLf-(Jk*FjR)gCvui_-TOH6+S~F^m(n9A2Np^G$ z*}}kVPlu*w@_>}-RHHO*l$)lwtUgiu5WGO>QEURw&sS_mAxcMD3ao?Nl`QqS#zC+K zAsNhb@&t)J+a!!fat%8L6<%kt0BNv?rj^TFn>4;_b@hor&W=1-=!cS^$xa%uR1@l| zMGEuyXW3p#TaqFNx>x vG`E=Vn3ir&AgOz9pqtlA!A`U*;eyQS2Svfb^@ zn>TOX?)Q(J%b7ks*~(HTQpj9Zcyn^2T)}X|%%|e^&U5e{9E}rotBJ;yOC)dDYA74XbnQ68G4x eFjR!8c8Tk!^l;*Pk|0aW*H`E(QZG0*k@ diff --git a/functions/Copy-ToWord.ps1 b/functions/Copy-ToWord.ps1 index c148188..5edbc79 100644 --- a/functions/Copy-ToWord.ps1 +++ b/functions/Copy-ToWord.ps1 @@ -1,16 +1,14 @@ - -#this is an ISE only function #copy selected ISE text to Microsoft Word Function Copy-ToWord { - [cmdletbinding()] + [CmdletBinding()] Param( [ValidatePattern("\S+")] - [string[]]$Text = $psise.CurrentFile.Editor.SelectedText, - [switch]$Colorized + [string[]]$Text = $psISE.CurrentFile.Editor.SelectedText, + [Switch]$Colorized ) - If (($global:word.Application -eq $Null) -OR -NOT (Get-Process WinWord)) { + If (($null -eq $global:word.Application) -OR -NOT (Get-Process WinWord)) { #remove any variables that might be left over just to be safe Remove-Variable -Name doc, selection -Force -ErrorAction SilentlyContinue diff --git a/functions/CurrentProjects.ps1 b/functions/CurrentProjects.ps1 index 06e255b..06a67af 100644 --- a/functions/CurrentProjects.ps1 +++ b/functions/CurrentProjects.ps1 @@ -5,27 +5,25 @@ The list is a simple text file with the complete path to scripts you are working Function Add-CurrentProject { - - [cmdletbinding()] + [CmdletBinding()] Param( - [ValidateNotNullorEmpty()] - [string]$List = $currentProjectList + [ValidateNotNullOrEmpty()] + [String]$List = $currentProjectList ) #add the current file path to the list if it isn't already there - If ((Get-Content -path $CurrentProjectList) -notcontains $psise.CurrentFile.FullPath) { - $psise.CurrentFile.FullPath | Out-File -FilePath $list -Encoding ascii -Append + If ((Get-Content -Path $CurrentProjectList) -NotContains $psISE.CurrentFile.FullPath) { + $psISE.CurrentFile.FullPath | Out-File -FilePath $list -Encoding ascii -Append } else { - write-warning "$($psise.CurrentFile.FullPath) already in $list" + Write-Warning "$($psISE.CurrentFile.FullPath) already in $list" } } #Add-CurrentProject Function Edit-CurrentProject { - - [cmdletbinding()] + [CmdletBinding()] Param( [Parameter(Position = 0, Mandatory)] [ValidateScript( { @@ -36,16 +34,15 @@ Function Edit-CurrentProject { Throw "Cannot validate path $_" } })] - [string]$List + [String]$List ) - psedit $list + Open-EditorFile $list } #Edit-CurrentProject Function Import-CurrentProject { - - [cmdletbinding()] + [CmdletBinding()] Param( [Parameter(Position = 0, Mandatory)] [ValidateScript( { @@ -56,19 +53,19 @@ Function Import-CurrentProject { Throw "Cannot validate path $_" } })] - [string]$List + [String]$List ) #get the list of file paths filtering out any blank lines - $items = Get-Content -Path $list | where {$_} + $items = Get-Content -Path $list | Where-Object { $_ } foreach ($item in $items) { if (Test-Path $item) { - psedit $item + Open-EditorFile $item } else { - write-warning "Can't find $item" + Write-Warning "Can't find $item" } } -} #Import-CurrentProject \ No newline at end of file +} #Import-CurrentProject diff --git a/functions/CycleISETabs.ps1 b/functions/CycleISETabs.ps1 index d081cbe..bc5bdd9 100644 --- a/functions/CycleISETabs.ps1 +++ b/functions/CycleISETabs.ps1 @@ -1,17 +1,16 @@ - -#cycle through PowerShell Tabs -#this needs to be in your PowerShell ISE profile to work properly +#cycle through PowerShell ISE Tabs + Function Get-NextISETab { - [cmdletbinding()] + [CmdletBinding()] Param() $iseTabs = $psISE.PowerShellTabs #get current tab for ($i = 0; $i -le $iseTabs.count - 1; $i++) { - Write-Verbose $iseTabs[$i].Displayname - if ($iseTabs[$i].Displayname -eq $psISE.CurrentPowerShellTab.DisplayName) { + Write-Verbose $iseTabs[$i].DisplayName + if ($iseTabs[$i].DisplayName -eq $psISE.CurrentPowerShellTab.DisplayName) { $current = $i } } diff --git a/functions/Edit-Snippet.ps1 b/functions/Edit-Snippet.ps1 index 3c29458..22f0c9a 100644 --- a/functions/Edit-Snippet.ps1 +++ b/functions/Edit-Snippet.ps1 @@ -1,14 +1,14 @@ -Function Edit-Snippet { +Function Edit-Snippet { Param( - [string]$Path = "$env:userprofile\Documents\WindowsPowerShell\Snippets" + [String]$Path = "$env:userprofile\Documents\WindowsPowerShell\Snippets" ) #display snippets by name without the .snippet.ps1xml extension - $snips = Get-ChildItem $path | Select-Object @{Name = "Name"; Expression = {$_.name.split(".")[0]}} | - Out-Gridview -title "Select one or more snippets to edit" -OutputMode Multiple + $snips = Get-ChildItem $path | Select-Object @{Name = 'Name'; Expression = { $_.name.split('.')[0] } } | + Out-GridView -Title 'Select one or more snippets to edit' -OutputMode Multiple foreach ($snip in $snips) { - $file = join-path -Path $path -ChildPath "$($snip.name).snippets.ps1xml" + $file = Join-Path -Path $path -ChildPath "$($snip.name).snippets.ps1xml" Open-EditorFile $file } diff --git a/functions/Find-InFile.ps1 b/functions/Find-InFile.ps1 index b2c008a3f2a89e35951cabfd91adfed25350c904..48598de4c23c28f20f69abd1a22814fff06d5b27 100644 GIT binary patch literal 1801 zcmb_dQBT`25Ps)ZoM@!96N%t?LYiP@LZVQq2p-rpxyh9n96PcdN(KGzyR%zD=)_)@ zhpLJ1zPs=4yYpGA3ong^GpWn$T%SpW@UjQ=+@02?LVrRBQr{0pzrxq4u%aH0_QJ~y zeKzw}7Jgz%gzN^bW3UV1(fMd|Yo$j%nHz_&Kl8$R!h>X(OjhUm$rOSU$S12)Q`bV5 zqy2zActR@|D_9~3iy$@l3gLV<4ySSf!=y6K=UUVhxfZ^tAf@AUMEM6BCXrlAPmGQs zWrB>t3|-n;3>s_d#>2u`STK9PYS4i<;8572>Y%34kg&$uqXhwt@D)(Xe|5~^0>u-; zTnYWic!kgfsvW-GL(xExj0;x?em`fvJ$@I%?0V1CLRA-Obbh)KX`Q{ILbB|VwqgFO7$@p z+?D^ulEV$~8H?8A$L@txEIO*UqkuD1SVZxX7PG1F)KLvd$cJAmNJ0l*d--nMuI3Nq z4QzH01jQme=vjVyxnyBdYcHh6^ec>?8wwxB;}~8b`JMAYer+X<6Rcr<0Q}*yt>>hz ze%PzlXFsegZzL{Z)ATgv0!AZ{bZbLH5~hHMi-qh`$jFhT6NYm_%w?mn6GbSOX;4S= zAmoR(Zde0vNQ!dm5hGckpjjIxG}kpxRI(}SM{O~FfBH8*ufT+Oap?O|51d`DD5Gp# zN^fk~Mj=kl&Db#=+)Em;Ftq}Tisy@yXHGk|Vew=$h1ftgkxEI2h0&#hqr<};>%l#G zC|YZg)E%n1W0EXb(v72?lb=S*sac|(RjAapnCG0m+i@GXAic27lyIIKxMTEB*gSS0 z%TOZ9V{w-q#SP6h+&&bHhLiRtQE?yUnQcCc6Il1+DURTlqT>@cbj8=3N82jk9H$hixz7*oliLiam P?T^F#_33@Hx8C~$@rBH(#l~>Er1X zpPuGsOF9+wUAa+wW4VBpNS5l0UYI%hiQsRfcY8pvTiMNBkzyDr&RkOLV5Yb`QLi~L zjd0fiE8O2few#S)Y{zl}zj?vk8{O&5IwI#bE20Vca64U@BMQbohqVYuuW-++*F}zq z=Rlg_X^yv%W}2}Rag)thjw&_{-7aD#XSCkKcdi^TX3P2JK2z-3hozpf5}`6DYU2{m z4I%ku)erHe%B05~%X_@Nz`AR!VdRD~l`rxV{LB&M&f2{tcJ4ZarDf4ibJ%0AT*)oo zB(M`^H?G|$SX;7KeqF3ums2KM9(a{%(?e!X{rIY z-&_l)k5&g-QFr)z4IfM8t=(HQpQXPhUSn`Xo+pjC32l5OmF<#LtWZngIov+EGPO;4?l_m#;ZI`}p0?IK_7M8;mu7_Phr?r-RKU!Ou( zIiGBbtz@Nm{4J|!itaWQ+bqgY%2Fa9)$RbAHOBrWd?ytR=j1ARh|m!;-1ADsoa&YL zoKZF{e7?C>Q|D>bJem@fGxnfheT+~!Igx=+qa52afF&|J*%)-?A|T$6%> zwu-cQLrt;y$4N~^93oDiV{yTpDRmZ1M#sAD+ICW?dU}92Y7jesXAaf?J7BA|^4u?{ z#SpqdaF?sD~U?kMEFs2lmZ2dwswk`+LcBalT4S1qwAK58A?ABE4 zmFhTC4Kh9E+}Qa`zpfhNu0E~au|8NOeipB1IaHWaMLz>#o1Gohf&U487}D5J?U(Pz&v0mtgIhrp_9y`9STphb%xfn@fb*k|)VcgQEX^l;Q;4 zFkqMJB8j9PANeG)aiel4wSpOLwa2o`LTlmoee(JOs2SbL>j<7B}tZVRBBMn-JpU_yJ{R2N^tPAmb4#G=wBWpL< z7s6|MMz&$&HrkL4)zhG{Xnc`mzZMS3+V8K?#RY95p6QfAo%f{9NVV=q5k-E%-Bz2z z4ro2nRfWp=HSOM$e$3cWkG&A2%EvC_=}zg|N*g4~Hqvs=!F?bg#j0WE>j?t|z29f8QqNLrRWsJ|X zquJk^*>IXrD`&p3et)0brIYz=0B8I(7=~Z7oB5sZ_8%%l!FfAOv*db`dG}}1!nZ$S zl;BpXpEONW-8i3c-njj$d%@UpR23zQ1@{-)O5cR@)03%CB(gTU z^T*y;lon6!McLrk=xQNrETuy7WTwGr#g;b6zg(>-n3~3j&lRqvf|o$~!AOVkJ(};@ zB6J?#5Qo$WOCTkr80OH}bs+JEt;u>Z3@lBVd83km#iZHZUsvi${W pJ4q8hYK)=RGL|Lsq>$8pQj?yb^PfY%cR1*G)L{bmaEA|s{RW@sTI2u# literal 2602 zcmd6pO-~b16o${*#Q!j%ET)N_$ifW~6_83JmWCoMDv3xdZS0rr6le^8U47nr=XTmD zvT;Ku?aZ8y_rB-r-ueB)5ST9?<-99`cH^YZH%48{iSy z4!;wgF0GCCA!t)jBipcZ>mt>28);;7{%728kq(_ab@D6T`&<#SuEQKUE|GmNuzU-u zc&u_MTAkv3=kUetUFH*6$tGxig4uIVQ?wPkK{kPN$ipj3Y-_Pf$=Ot}dy1FxAcjpU zIU#~EQE&5}*C#eF3~H?Bka9phg#h5Ji|_z2$c=k@2O6T##_f0+cj?~`DkaF zG8sDsv6?0ev-cpa`n&9~q>)<(wp?>SL zmDeM(e41WUJK6iGO32@wOpRQ{dPJV}?~*e>JCdrr{Hed}r6QICH=HY2ll8;NmgO~SI(Bouo{3{8FKSCw zidI%-^W0ka=lf0z=|zSeI#;pgIo-qe+98JN4D~q&SAbrKrG$s(Sow*lP2e4B*I-Sd zY6f(=`MoAYQ$?o}P*c-I8#`7$z5(xI<(c{!FE0=RzU~3-zQCr49&m&2I{)zs+hBL# zA}?}(tP+pc!s98n|F6S(3?4mj_j=8Kn>-cIfncTk2Hz#&J!Eu~-qxh3x(PesjQprx rItQ!BHIdpuHI4dmn($Ub>(A|!{lkCvX#Xj$9dvouuW~JZL&5DYSZ!rw diff --git a/functions/New-InputBox.ps1 b/functions/New-InputBox.ps1 index 4d9fa9a..0b488dd 100644 --- a/functions/New-InputBox.ps1 +++ b/functions/New-InputBox.ps1 @@ -1,25 +1,23 @@ -Function New-Inputbox { - - [cmdletbinding()] - +Function New-InputBox { + [CmdletBinding()] Param ( - [Parameter(Position = 0, Mandatory, HelpMessage = "Enter a message prompt")] - [ValidateNotNullorEmpty()] - [string]$Prompt, + [Parameter(Position = 0, Mandatory, HelpMessage = 'Enter a message prompt')] + [ValidateNotNullOrEmpty()] + [String]$Prompt, [Parameter(Position = 1)] - [string]$Title = "Input", + [String]$Title = 'Input', [Parameter(Position = 2)] - [string]$Default + [String]$Default ) Try { - Add-Type -AssemblyName "microsoft.visualbasic" -ErrorAction Stop - [microsoft.visualbasic.interaction]::InputBox($Prompt, $Title, $Default) + Add-Type -AssemblyName 'Microsoft.VisualBasic' -ErrorAction Stop + [Microsoft.VisualBasic.interaction]::InputBox($Prompt, $Title, $Default) } Catch { - Write-Warning "There was a problem creating the inputbox" + Write-Warning 'There was a problem creating the InputBox' Write-Warning $_.Exception.Message } -} #end New-Inputbox \ No newline at end of file +} #end New-InputBox diff --git a/functions/New-PSCommand.ps1 b/functions/New-PSCommand.ps1 index 30d5c714f3e2a510d8eca8fa87fa22897e00ceb5..d3205f917af1683e84d86f7fb11a79ffaa1fc790 100644 GIT binary patch literal 3525 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 DJiRUl diff --git a/functions/Open-SelectedInISE.ps1 b/functions/Open-SelectedInISE.ps1 index e6e7552..62a4c4b 100644 --- a/functions/Open-SelectedInISE.ps1 +++ b/functions/Open-SelectedInISE.ps1 @@ -1,15 +1,15 @@ - + Function Open-SelectedISE { - [cmdletbinding()] - Param([string]$Text = $psise.CurrentFile.Editor.SelectedText) + [CmdletBinding()] + Param([String]$Text = $psISE.CurrentFile.Editor.SelectedText) #trim off any spaces $file = $Text.Trim() if (Test-Path -Path $file ) { psedit $file - } + } else { Write-Warning "Can't find $file" } diff --git a/functions/Out-ISETab.ps1 b/functions/Out-ISETab.ps1 index 7b8d27a6ebc420d6606cc1dc2244f1d77c8d510e..7a84930e10c52b8e558464757ac071243ffba639 100644 GIT binary patch literal 893 zcmaiz!EWL(5QgtO#i&Fg(L%H@P-$BP5(m^sX}gDtgNX<5DzPJbQi^tY_Z{0P0kqQk z6nn;XB+62S{ks!Z;P=AL08H)H#-Yl>!8k?d?6K2V!qN2ExqCwrD=TiPxuu| fvTRf~6nSgqFhC6Ozwz;%V2>Ex)9o&Q+-UR{JgoeD literal 1912 zcmbW2&2G~`6ou~^iFdG)EF95VyZ{nVwNe*VBej%8)rFh7iL3m{2?PXvb>KTQnb>h0 zQ&pBda#hO%_6pu9p5h%VrL|H<-ZSK5 z8<4>gA7w5du<+iF_+DU7@ulp}k^ae=c6(%4ka6auZrGo=zcW_nL@>bKf?dTvW2|e{ z^DHBrliw2>!uA$4?(lVvjfKPava)-0Ajd0PyKIIwcG_RaF0&K#3!V&HE9#fK3RLmy z@73xv(j%8aQzb*pU$H9mGOB;Ww;)C#s;rMeFk`+1p^;nZzz%{k zA7kBa`0qI!bV@v<7NC?n+>#emD_D7M#6ZmR6==_~3)13*_^o=SyyEMcF=Ww%aq!-b z(aF|!K&om#oaHwAFULrycunL5{2DV(czhR1wrpQoVxM5o1MKi@4|#;qquCTuZ_@>o zf$H^f&&F;g21Ftrd-fmVS{K9>PlQ~G^qAQK7N~b`fz1V_`QT1M0bMkxryrv@}r({ z&G>^cb|<{_^&3y&4pN6vPtu*zKTzp5<~DULk3-<`>pND7eL(t|$h%tn+a diff --git a/functions/Print-ISEFile.ps1 b/functions/Print-ISEFile.ps1 index 1c7750e..8e9023a 100644 --- a/functions/Print-ISEFile.ps1 +++ b/functions/Print-ISEFile.ps1 @@ -1,15 +1,13 @@ - - <# this is an alternative way using the default printer get-content -Path $path | out-printer #> Function Send-ToPrinter { + [CmdletBinding()] + Param([String]$path = $psISE.CurrentFile.FullPath) - Param([string]$path = $PSISE.CurrentFile.FullPath) - - Start-Process -filepath Notepad.exe -ArgumentList "/p", $path -WindowStyle Hidden + Start-Process -FilePath Notepad.exe -ArgumentList '/p', $path -WindowStyle Hidden } #end function diff --git a/functions/Reload-ISEFile.ps1 b/functions/Reload-ISEFile.ps1 index b71c345..22748b7 100644 --- a/functions/Reload-ISEFile.ps1 +++ b/functions/Reload-ISEFile.ps1 @@ -1,15 +1,15 @@ - -Function Reset-ISEFile { +Function Reset-ISEFile { + [cmdletbinding()] Param() #save the current file path - $path = $psise.CurrentFile.FullPath + $path = $psISE.CurrentFile.FullPath #get current index - $i = $psise.CurrentPowerShellTab.files.IndexOf($psise.CurrentFile) + $i = $psISE.CurrentPowerShellTab.files.IndexOf($psISE.CurrentFile) #remove the file - [void]$psise.CurrentPowerShellTab.Files.Remove($psise.CurrentFile) - [void]$psise.CurrentPowerShellTab.Files.Add($path) + [void]$psISE.CurrentPowerShellTab.Files.Remove($psISE.CurrentFile) + [void]$psISE.CurrentPowerShellTab.Files.Add($path) #file always added to the end - [void]$psise.CurrentPowerShellTab.files.Move(($psise.CurrentPowerShellTab.files.count - 1), $i) + [void]$psISE.CurrentPowerShellTab.files.Move(($psISE.CurrentPowerShellTab.files.count - 1), $i) -} \ No newline at end of file +} diff --git a/functions/Sign-ISEScript.ps1 b/functions/Sign-ISEScript.ps1 index 129c76f..640f3d3 100644 --- a/functions/Sign-ISEScript.ps1 +++ b/functions/Sign-ISEScript.ps1 @@ -1,13 +1,12 @@ - Function Write-Signature { - + [cmdletbinding(SupportsShouldProcess)] Param() Set-StrictMode -Version Latest #get the code signing certificates that have not expired - $cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert | Where-Object {$_.Verify()} + $cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert | Where-Object { $_.Verify() } If ($cert.Count -eq '0') { Write-Warning 'No code signing certificate found.' Exit @@ -17,28 +16,28 @@ Function Write-Signature { } #save the file if necessary - if (!$psise.CurrentFile.IsSaved) { - $psise.CurrentFile.Save() + if (!$psISE.CurrentFile.IsSaved) { + $psISE.CurrentFile.Save() } - #if the file is encoded as BigEndian, resave as Unicode - if ($psise.CurrentFile.Encoding.EncodingName -match "Big-Endian") { - $psise.CurrentFile.Save([Text.Encoding]::Unicode) | Out-Null + #if the file is encoded as BigEndian, re-save as Unicode + if ($psISE.CurrentFile.Encoding.EncodingName -match 'Big-Endian') { + $psISE.CurrentFile.Save([Text.Encoding]::Unicode) | Out-Null } #save the filepath for the current file so it can be re-opened later - $filepath = $psise.CurrentFile.FullPath + $filepath = $psISE.CurrentFile.FullPath #sign the file Try { - Set-AuthenticodeSignature -FilePath $filepath -Certificate $cert -errorAction Stop + Set-AuthenticodeSignature -FilePath $filepath -Certificate $cert -ErrorAction Stop #close the file - $psise.CurrentPowerShellTab.Files.Remove(($psise.CurrentFile)) | Out-Null + $psISE.CurrentPowerShellTab.Files.Remove(($psISE.CurrentFile)) | Out-Null #reopen the file - $psise.CurrentPowerShellTab.Files.Add(($filepath)) | Out-Null + $psISE.CurrentPowerShellTab.Files.Add(($filepath)) | Out-Null } Catch { - Write-Warning ("Script signing failed. {0}" -f $_.Exception.message) + Write-Warning ('Script signing failed. {0}' -f $_.Exception.message) } }#end function diff --git a/functions/get-commandmetadata.ps1 b/functions/get-commandmetadata.ps1 index 734696c..26b1e67 100644 --- a/functions/get-commandmetadata.ps1 +++ b/functions/get-commandmetadata.ps1 @@ -1,15 +1,18 @@ - -Function Get-CommandMetadata { - [cmdletbinding()] - [alias("gcmd")] +Function Get-CommandMetadata { + [CmdletBinding()] + [alias('gcmd')] Param( - [Parameter(Position = 0, Mandatory, HelpMessage = "Enter the name of a PowerShell command")] - [ValidateNotNullorEmpty()] - [string]$Command, - [string]$NewName, - [switch]$NoHelp + [Parameter( + Position = 0, + Mandatory, + HelpMessage = 'Enter the name of a PowerShell command' + )] + [ValidateNotNullOrEmpty()] + [String]$Command, + [String]$NewName, + [Switch]$NoHelp ) Try { @@ -17,12 +20,12 @@ Function Get-CommandMetadata { $gcm = Get-Command -Name $command -ErrorAction Stop #allow an alias or command name if ($gcm.CommandType -eq 'Alias') { - $cmdName = $gcm.ResolvedCommandName + $CmdName = $gcm.ResolvedCommandName } else { - $cmdName = $gcm.Name + $CmdName = $gcm.Name } - Write-Verbose "Resolved to $cmdName" + Write-Verbose "Resolved to $CmdName" $cmd = New-Object System.Management.Automation.CommandMetaData ($gcm) } Catch { @@ -44,7 +47,7 @@ Function Get-CommandMetadata { #remove help link $cmd.HelpUri = $Null - Write-Verbose "Defining a new comment based help block" + Write-Verbose 'Defining a new comment based help block' #define outline for comment based help $myHelp = @" @@ -53,30 +56,30 @@ PUT SYNTAX HERE .Description PUT DESCRIPTION HERE .Notes -Created:`t$(Get-Date -format d) +Created:`t$(Get-Date -Format d) .Example PS C:\> $Name .Link -$cmdname +$CmdName "@ - Write-Verbose "Creating proxy command with help" + Write-Verbose 'Creating proxy command with help' $metadata = [System.Management.Automation.ProxyCommand]::Create($cmd, $myHelp) - } #nohelp + } #noHelp else { - Write-Verbose "Creating proxy command" + Write-Verbose 'Creating proxy command' $metadata = [System.Management.Automation.ProxyCommand]::Create($cmd) } - Write-Verbose "Cleaning up parameter names" - [regex]$rx = "[\s+]\$\{\w+\}[,|)]" + Write-Verbose 'Cleaning up parameter names' + [regex]$rx = '[\s+]\$\{\w+\}[,|)]' $metadata = $metadata.split("`n") | ForEach-Object { - If ($rx.ismatch($_)) { + If ($rx.IsMatch($_)) { #strip off { } around parameter names - $rx.Match($_).Value.Replace("{", "").Replace("}", "") + $rx.Match($_).Value.Replace('{', '').Replace('}', '') # "`n" } else { @@ -87,7 +90,7 @@ $cmdname #define the text for the new command $text = @" -#requires -version $($PSVersionTable.psversion) +#requires -version $($PSVersionTable.PSVersion) Function $Name { @@ -95,11 +98,11 @@ $metadata } #end function $Name "@ - if ($host.Name -match "PowerShell ISE") { + if ($host.Name -match 'PowerShell ISE') { #open in a new ISE tab - $tab = $psise.CurrentPowerShellTab.Files.Add() + $tab = $psISE.CurrentPowerShellTab.Files.Add() - Write-Verbose "Opening metadata in a new ISE tab" + Write-Verbose 'Opening metadata in a new ISE tab' $tab.editor.InsertText($Text) #jump to the top diff --git a/images/convert-menu.png b/images/convert-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..237e5b128f8e78a41568f8c6016456772c06107c GIT binary patch literal 11856 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 literal 0 HcmV?d00001 diff --git a/images/datetime-menu.png b/images/datetime-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..3fed568e9269680b53eda76111b23a0ce267e260 GIT binary patch literal 5320 zcmbuDcTiK^y2b;97U@MG0@4ITh#Zj5im0KLn(?>g?fuY5(joN-u;`GJ zErokkm27Dr^CmzqRKxqxlZH(Dj+42yMBz@ZU`bkL$lq#uHMKs`MGtx~)r=nt{_IQf zBqsgV$7IjbL*7f@7!i%Cc&qn3e`GIvV`JlYm{9Efw*=6_ul;p+LxfQ5WuMX zb=kmQS-CLbwqS@VTvl@d{d9W)K58VyAkLsh2Ez|&qTUGchIJy?5^ka;7<2<?!#^qvQMxMrv5H2WT<&NnitzAY6BWEadH;G41@|E& zDCh#A9Mu)H_2Jsx3`R3vVC^Ewe(}W zs1dVaF%nWTDRuU1{p!d_(Abs!L|xI*P}N-Y$z=n5=~M> z_9C&y`Qt?3*-4=&BLW3%&jBX2fo3<3FmlV3xgT*3{jc^JBvC5^+`AGgRS|#e7)xn z)~95$va+VL6<-?#|2{p?A`n~@wpYhQaTOJhQkSp!DkN0oR=(6WA8-F5_xU}lI4?4? z`I)8|YuPtmn5CAlk$m)wlM7C`u9`ldAB03fWfQhoCDL-@%<5dfIS4S`2~Uf0=dCbQ zlX}RU2}bU*`{2L>(^WST2&J2lSJF~}%$WsRh@$otxmkj3`w@pH<=|i=_vq6nh+CZn zLH@Dyd799BtV>VNj+}uJ(YUbwu&+u-S=U+gJem)QNlZ*M$olj?BfnDb1yO-!peH$D z^Q%66Wn*MMQATX&C5)$Qc@V4~)%Aoc*N!L8(ta5n2dopOmd~d1h%7pNi zWGv1=HvD5mVKrT1g!1JTe=DwxU9L9sbV>ub0z^+w@1g+3Y`O0&_B;!d-!@~N^-$Vb zdag0t9Z7P{cZKY{K4BLBwk>l0+q1jFL+!vi-hfgzATHH}fT4GC@ zFixMs%}op+OfDYnt@Jz9NS=R2XLj7Yh?0&9ugLoH+*XAYP z2g}P(8Pt2apwqhYN$8K9uxPQn`a87tCZm(eQvJIdYKV>E1ZfADu&N?*OY^tCGn#p#U4 zGKGz)KGup(w!;8 zcbf*$IGQhF^ZWu1xrr)9_3tv*9#j@!9s2why`r`e|Vmp(Qdc2twcktQKN*KLB`s+%1d+f5EK~D0T zyw!c-9hSY)S*wHXmeUuIIIIxfwM*s7LH#HtMoXHJY`S0W+c1-ZcP)S@PCzdAHL1?1 z_@OEUpO74HBM=_kQ@?(x2x>f0d$GqGr3~$*x5X|47^`GY5oA%mWC^z(7s`OC1S(Ro z1KatA7#?blwOP?Qet9!6AETEk~_QLE9A66L>WQ-w##f%~f z@cKocLq)eW=PWMw8s9QaqFP|<_fYYIFyfpr$)#)Gm8je~1J1`zFRB)$;cs~bMXGQ~ zw&FdXp}*BvZ~(t$S#}<@ur^r=3XO`Q#o=&2C+v?p_@icN+Q`*eu|tDz`DTPf^XwWx z(y3^0i1UD8VKE1*chd&jEwc}chn`pz5_waS3tBq#(gE?7NH5Raf`i>EmrG)Gk6^X1 zqJ}8FTL z;Pbt!R-yO2@I5IvrD#9eB0UOy=zf^=HOYRe6*AqBkdDa)ZCTuyvJQa`64Nb}Qy3 zpizh`WZD4gSi#ASFGtn;Tg$mS^asfd>MphuThd=5Kx%#cP{Imkz$|_zY(_E2M z7h71|#LDLs(tuYvTE^N4UH^cllGQ^Wgetd?d1bxQ_en7KF%Kmwp>0$2_iq^?vL4fp zeW6S>VbhLOOX9v~Cr9t6{>HR-5o79h_310x-MgI%t-8kg%vHZG^JsAha{Afv$0W&B z_p@3{R+Vl_CvWXFP{&=597l{MYE$1;j(A)j)FgR+)fs!bPp}D^aSSpVeKQ3+2TIhX z*=pSzUQNtqbHH9=pc875hRcHg4Yd9<+tR-t5cwML(9}nKPWc(T3)i-EHKV$nbNxJd zk_n5&+p0(@`s0>#t|vstYf4IFA66C?5Qyl3DcF_h_%r)BO~Ty2av)Zd$1iWkeCXjv z_$epyE8Tu*FPo?)*e70lU(aHr2vu)Uwg~)!UKKL3e7*6}*4q%y?F-P}12lzP&EI{O zFXPvt9gEox2}W{JsI0E01|hAix?g*LB<^pv+WdWuUAXNGY%5A0y=j@GTOZ3e(^no2 z;jh7sc}*VG$S}XiQ6Ztty%W=Zp3Q<|=P^WM$;g$FY?6Pr>LZx!jYI;%O6OGFAH6<6}$H5CzH#RXFjfU&)H zeLKP&P^&`jJcL=lSwrD&o`HX zUgZHP$2x}AE{!`mJ9mE-_`Jn69(Q!Cyz}tFr_?Kl8x8Z+jK^7OHLTG9f_ClFUN~3^z5#@py6@G*dJ{{SF z_Coq!+pwqZ#w-YE>5ps`HSwnC3-|CO+zHFSu-JVa6DZhP2k+Oq@CmkFZrSgCx=~G( z4k!#lfI!Aq8U^(tTj|^%hjS8yw#|9-eW`{O85)rs`i1R033H}W&dCV>EWF8Y{m=;H zr={fEVcx$vsQ0E0YVhj8hm}PrB`p5yz)Oj8^nok6`rNs56vOg^%~={-+yZpsfc*d0 zcEg-g2h5$%I{1kM>3*qn(4i~Vv(BQ?cZCI-NEd3mQ9V(!F83McJ(IvTl!J2}Rbb9E z)AhN!O!*QBxMEE9^VO(v*t!l75tsU&-!|RsdB(GG@J;4)f>q-r6iDRxNa@AzL$4{N z~sB6s+Uh{@%0umC#MJVjXui|Q0UV2+XICc0S!k~;VD|F{ATz2`rB8{O<74L zI40O@}TW-Z$zV|-csvvTgF#s3WB;4|2W4`t-4=J zzU+E)maZX$v`m1g>QidVobHUgG9o2H;_inIy4)8Pb{#Fi1Yu0s?_y0cO3W2-0GCSq zETrKkz;YrYXsnw3Ts572RlZA-;Y3H(v405?btuU1qzbTlJ`* ztFjD&ykf2>QJEPh^61lyXQ@Y@n00MYy+4Ji0?rYMq5u_IeVP;({=AIc1#w};Irpt7>Cj%Br%jArzLV|78x}F|yG#nl-J=aqW z``cfM^p7ss`W?l8nx3BI$notGy9U|FvZ*fw*VLXJVYjhM($Kp6 z<`vUnGM{xsw|9$&gvRMlPW8hD8VhzOhj%VmMdM_D>2jfOiuwRu{2;A`Zi!CDFy=K? z<=EGVuF}vy#N(R@n<2PreVjp|VsHT9H}7yAJM9igWM{dt z*nUn%DcuY^6$JVNmgGx@yZf9 ziH_d+Pnq(cc$Pom@sqd3)+JmkZ|I)sHE%pSsY^ViWUVKvEsfZ>4ENOC?%U}$*&c_v z=So5l2!xgQpmG%NlU8=U8^^pDVx+^24W3V1KnZynt+I$o8S3_9}m#_Q(TlumVKKR(s{ z;e%e~*hSe{f9jMpy@JYfy|c;pI&QZ}+wua&ETVq0two>!dTNodK_c5HOYh$)WxgWM zm#EBmOeQ)W*Vi}Gi`m;Vh;YQ7gGfn@20lqs{n%hIf-d|D%HRlatmcn3qX@>pMoiFu$vU$KoB66o}JXR~Fi z*-H&@T>zaIO9$bD1M;J&< zQmH!Vd*Xm=#U&NS8Q8i*U?B1BhIgIC^!&V@0#x9^L;wI{b<-B<6|}QJr{f=L6{5hecs(}!# z!+N;mK&#b}B{F$&BJnp&{MoZgLEJ4tp*zt&)G6E~tKLkkHO_K$Z`M zi8f%#)ol;*zHPS=*y6N}S8H{PxhGy4X!m-7iB1v&xM@e8^XDt8s=k)?x*<9R6HpkJ zTOMjG@b}j{i?!z7i}KN}EoG~HsW(3m4f7W;@$GrP$N&fAU>a6;`nldJso<|u@yeAfqx zMGz1a&f@#_xo3~F?>RsAy%{NMWUOS)HP@Wa`;-~=^zkDS!rO!(5Qs!YS@9VNgarqV z&%yY>dk_dK8~7l2u591|0+IIIys%PuNEv`HZ+WU{DBaq;g+oeuoAf17CI|!tsVK^6 zBj4_4YuYjB&2_w7?hvBOYzWg(@LBg=*Lb9#rLk_Y$bgUo6RNtD?hiRh)3X^L$@hn# z9JufVkp321^7$}`mZ4c>Q?<8`zTE_aQr;lcE{V0^^-mKcEjtC+wIq% z?H9n=##Noy;I?P@4F*bDuDnr>`M zrSmMEge|?;WI_)OS-7|i|4cJUQN=qxK4uz88?esY;7S`r9=4s`XC|^Uy8-f%fiQC3ZS6SG~OnsJ~e54zfqGG>+^9Uz~ z*D@s1$-kwcWzbMwbIpKC;hwc=M<7<0HVvkiFSkD06N*a@>S9$)Qd0K+*!>J1!Jbw2 zXSV2@XH8`ZiaMEs?OPEZh3U7eKbLg$^fdu4c6MOb_FqMX3p{CqA3ZinZ*E0K2E8^c zC2j-w>U=eV<@vXMa^PxypRdPj6c#PEx}0wp=T_I(TgPCgj9gd0<|&+S%3MbsZ;q^Y zT>o)>o#@DM7mx;+*HPZa0Rp8$7iKmrnAuOMRazs7|Iph zyAC|W11?T-dK(Ii`K_$1a2OaEQu{VHH)ENMJB|)A=qdZ0gd^Tx@eqSR)Yz_9^q_}= z;lecPw^YU)Zbzz5iW#ai8c4jds{|7eKg1y%D{~(1c+ciON@Z;z`X^0ZxUu#LLU(_f zdc!7?;9d2@2wPKI;67HhU%;f#S8(?B_UPi5TVIU-@DTgxcgCONcOYTh<~w!h0{>rc&nm*9aX8%b{Namg!PP-svi}<;slbKDo1A7pO?q3NlhuJ>V{A zN~1A3oW_3SG&W6HtL!vorYKz#UCqIjo#vfEyk^>k} zVMm5X38|~+JHDTklqBwdUj1ER*zK)mWwy8*wwjt6IHEf}J^i`J#%vuTiy5AlejgZA zajzY!_TN9$24{Q;N=M4l5+7TU-M&5s*8a7bjN}k7(-+;f2tuIuU)>*~z+GkFLW4t& z@ThEY<<7DH1^#3$9zwzd-U;3TchNotAaa%HUrrA`>yFt|uM}*YcUdHCWf5OcNVCfh zZ955E80C@FYBCnx_~^NvIBLt4JF-6hLSr%U#M5#9HqxXL1 zC`rS!l9l5T8CS^zG&%-@P)Y1`dpn92N*Y)>*&b&SNp(tY+yYjf|8GoRW#23j^HRo} z>;VC(sIzK4@1o1I!}W8_dhf^X?rvvE^l73|qswZFp6T|0@e&EV7QVkYY|W2wJnJ_u z5?iL-4X95&N!*rTPOPb9ckgH2MzR;vuQUKVaCr^TUFL36E_V(M|>LOey5W$yTd$Jd574!-#4S=mX?Wj zcTjK%Lp4m+sJT2=i%6pB$!VJDT*is?)kRZElQC{ky!1uCAk3u6y>LM7olkne=`7+* z+m>HIfZ^qo&-<5`^UILS8 zToPJ-UZ77xAMCEH5Hee+Y=W=DohQ@Sf+5>Kr_IDvziJgfUi}n$i%CuQWHB?2D;ijT zeXodUWBP8Z?f6T_%R+->ptoaY^1FRLstv(RTw z%0ueNwHh&u5rv9@3 zv4&pXG6^sC{AlD9A`G;J_?>Of`(|wF&fF$CI|K75ZjWQ zI~F=fy`JDS>Zn4QXp9FCb3$!V@OX1`N+MpO&q(7AqqzqvwGz0LY_&yvR`Y&a)uj7Q zd<3G!e*)q~O<9!LqNrltWQf<6XjB(bG`aD$6#>h{sxMA1k=^Q+=h4ci2ad~+bEKla zfB#_LMot=lmN>L{)=U;Y{TJQ41yTm+CQeaa`nO9 z{|?TOMHndXIB79#ZcJ}iysxOpYZ-WVI|RI@@@f5AQmZ%?jIxcn@5`{`a^Th1VdO|@-T<+mD%Rn4@n{P;3s#;okYT!?ua;Q9miF;uv!XI6Xe(1 z_-wH#T58HHTS9V0E}_{u<9m2speB zRYxFjM`>!|UNM0Qu6k?@zH!jVKOuYSKn=qGs|E%4ji6h>p~$HLorxWZ5a=o8T*m*k z`usCj|JP#G%3_;JGsdg$eW*di$5-ckTe#sN_VT_+wV#lT%1Z2|rC}BfI)(AO6Zz@$ zJTOPhn>5gw47ZE0XBJ#MOv=b=dqR2aoGWY$!lj7Hy-uRYLVfH?XR5(T*dsaS^5ty; zX&dTtBlABu zLTzz^yGVfgQW9w_JkhIDlBQquV|>`#T7Fl1x1PwIPJmN(WI-up4b;rZ;ph3=54% zu(E~Y@v@bblrn~I-c)Lo7)U45LN2}3L;-TuS!dB3ga3}I5o^(dYD7NHk)=lm^tAD* zJgI~zq8S!_L0th3O|v;F4WgsP>ET_|SHL3RopZ(uB~X`iCJ!ax-O20h5n`~>Oh$&8 zBzLJcFUd=0CTir-elEWXZGQDk*v4V7fca{ z?F!NfZuIZ|*k+(5`AQ*jBQg7B!3V0Hq=beIgQQJGh zVKZR}?kK!}SP>HD`ZqyCUZBy(f^G>hQP5Vb{eOqnF_Xfn?oOMS=#^*-%E%o0=D0UG zq20E}H~u)b(`>uUBJ&YW)#cSPZ zi_N_yP3sLBx{jt&=X)sCnv8o}4%=V9rWIg=fI%QpQPJwUx=@7(($$^GGVzyJQgMtD zwZ$(0y;y0|68`Jg3q}cdTtI2(zPx%d?}o6ojge7H#En~jesN+CG8E624w%z#WI!L* znIWanU`xR_>?PYc(n3O5vhy`wum8aXA0kP}$QbfY-mk9S8^@}ntQ&~4KGn_~oS+M< zXp7qnp(!lv@liNeBgO_=G7I>bvj4cyuwv~?3eWk)ZdFZvec0}F6(CvG+s>90IFsxR zOgD~SB&%`^S^?zYb9V$8liEyQJPSkNf!|>pLMms#`Y9|WVPw;7y_Y01->%#OkUE2d zgQ?Rvofj9r%c{y^KxZ9F8+1SAzpn{V>aQgh!g}u*P|uO0a6h3`#hW%*et5(3Y+WQt zVN4wE7_b58+i2EV_TMHmb>!Jc{AY*Def|BB`yMxX>v%{Ev-VoRGB9w-PThBNnCY!_ zz->TCFb#2Qn-NoMrF7n0&+%5GJ;S!~yt5FVN?#uA{x#I&qH;V)3|cfM^NA z;h|Ac1jemMa$0`l=WTJ{zuT;%%iZEkS26d-H_+umxa!{Qwy+R$3nG}dQ%b%veOsYO zfo5~$=}a7AQ>az~UZ?bm^O2>T`}@10w5CX``T2P!6S%bWlKWks!=(p<>#NUa#`0d+ z+V&#(Km`+kXD}U0aWYY&g*;l3>q8h_xM)10Qi_R>H|mNTMxVwyJHa~bI?^o6&y?_2 z_5Mj}`dtO>N(#vGz~fnD4#YRUeuWHYOGW_x!K4TL&tS;UpI%bFC;fE@cc8-isL|!w zk@7s`E2fXVzzH1<8p}84_}vTq#x&rkj{ni8Td8JVA731AR0jUcqyFwb`^+#97*Z3a zmkCGP!^GfYZYl$lS_VZnay-#X6b*S4T|_hEfOC{8G3-C}8*$9Kc)>SGw>4bA(SVRf z#JWn%yPfXM7WKt3N#d&{LZjJ0D=VKunQ~i1+<$yixe*2_iNLS@Zu@kw-ViGsve^tk zv61}yitX>3+1YKO>*%*Q5pIZG)!1~vw$U*4b83nLS}(BFqhW=&)L}5rt>*xpt`yE(aFuF>k4K_8pBipoJ&plt`&~(`#{cFdd7q8D zZ=mUa@0wlj?4(}?Zvwu98ybI1|M|V357?HmmgKKFRCx4uWe6jiQjZ(B_&C~4Qx6no z)rk24)%CB=P{;Xa0YNFLJ$pE%AlL%G!qExpY$f~*uZJc`smWGa6-&hw`(ZDH*Lm{9 z&5;Wl`AqXQyH^D$W;V;ieE{FDnUaF6fv$8m)jIM`h{p`Y6GosFEJKycZZesb{x^5T zeNVUo0f||3y72h8`TNW3vzHh^#Cf;v`-oxAGcq32`Imydb>!cQJ!owsP#Opx_qB4w z?R$4mE7Bax(ScE)2P!B@RBpEl&_Kna{UNp?gzf2vOcw&)?Nl&>uQTEq6`nxH?|UG= z`jcmMCMvsAzj5u{S3Nd|Eu5W65W{b`x7vP2V-dhXtM=@=;z!TETp)$SZMm@{cy}YsO@E^)wa17NFIqpjWS`li9TV zmSltqu(-B$E<{MWQUOtUu+;W?GsllqugX;9%7fzSfZD{y=XhhNGH#v^p9>8V1a2%9 zS5aTUGg9!RxAQ6ln-G$*)8zs~E2t-{KRgyiIQ3BWef!3Kby6&2 zVQ)Wh{-CZnH}LkOI7T5=xt7p#-M0_?8tgZ%`Gvf~!^5BNOmO@E`ktl{FFE8W*1!a; zvhI<W7+Fs{>9({! zDTUMtS$IX`=7<7gJl5bWSe#2k1Ab)zLmyBM?>eir^^RK< z5ehwj1y*e1Yv8r=PTK8?80MRc@UT%A-bkYjMoFVCHD9G$DXU0D$iHtNHYoR^!d91Z zT>e)3g4`LKGddY_mhw4ip`+HYB3~P3fkb|^ajgN?u;yWndsB?#bfpD={aY5NUwEqa zB%rsL4#P8G=B!MzFos59E#hM~3XaS0m_@TLLe*F%n+)-_oVt+`Ks58U&2?eKMKA|& z0G&Szy!@s1R_aA91V_k_Xq`9Ds6o&zXos{h#@IO!G&QkLYtoTgV`)#fROD?jB$I&k`pX>Z*)yvrB-y34*dvzmDW=R9q z)ipK2f2mowfPgmcx6CquG1tF0Wg23sZg_+g^5~tPt9j>K!Y&j!Ui{IY&n_E`%u;eZ1b31B0e2ww=KDJy9HA8u)QI+VU&RQc;!7 zt?#`~sVTwuln|S{ztn~&g7t_hiq=D@66(2ibXdc!xh-1x>oY`~3CrY(iS&iPY*8f^ z2@d52DLqL+-LN759|YLJpzw$Y%$SlVOtf|ETi# z2m7i)9s&Gz&@)d_X1s^=pm`8bxN}Pdizs>Y^|i?RXjJ=I5jtFQJ{yW!zR)o8XwFfo zNpNonhf_(Mnw^H{)Ws)4PQeO+@d4O(UuV*=7yb9DUOgg))MaK9Mk!@6@k6q`_?1GV zl&t=!`_pJPfTPIfDP0p6kX2_#LsrQ9Snnlv zXA^oHWp*vfWQ@_XF)Ok}WfKQaS&ud@>tlxu189I`MD2dArbOOfa-)mTyC0#!c?SRUN~P@QJr8T%$b~QFzca&KgvA(=Doxv>(@cHsM{b=w-Y5nf zu_w~M-dC6ok05;z_)zp9FPM$hcQXd9ZWUGH0ni_Rz;-;}cYQg3a{l8-t)}XZ`s2rQaWWDT zQ2;A7+S>$Df|lC6%P6cy_;$qap<8P`2cu;3D(>pUgg5ZsCHA*zEfrupl_QAEAVj-# z_tf>D`jO*~vev`@7gzg#!TAeE#Lfiry?o@)cCWfAhxt>2!8Uj!dTROgI;tlJz(eF_ zwhwXW*k7us(a28=Pyv~MA~>8|nD}_r)YKH$!vg?4;9RvWx=-2B-ofzdw|DDGxAX`y z+n{DS1ifx=$CyTa3MYZD1>EHark~{EL&CW@>0n&e93;Qa``37@N)`} z-VtEaTG`tZOjiMJ?I)o8)V88GkK=4|^100E@IRSD%=|I0%3dtSJ>UWs>V+%9!9pq# zS>5{63vBC zyfPIQ<+(FMmOdMLaJ<*_yxs3y_I&bJpr-vI{XVg(Hy}wG7Y0ON-?~<-$(5t?SH7p2 z;lF#8YUlKpA11Lvqtfd3x+4t>-(l%hmBUL=-x*+~VQ(v>tQAteB^QbE`Wh zYtK6(hwW^h?j+~sv9|s>od?xFI|9OrRH3p-n9E}GE5EY?IVz=fAhN|YxF>l7DNha` z{L&TSF3S8D|C*f2+p;#dEP}{2H}N|AXN)thCZKqA@yb1+;SNHpInKIa;Yo7a8$($p z0^|SSXv3Dl&HlgcF-!Z4A0f=M*A}zsFPsrOok(1UVk;sXEvc+7P9xemhiL~haloPQ z1Pl$I%sa%(7I-YcmI1n(y#UfWEs|O|Ij+!ALUt4sy!Qnfk96{WXnFSe8%rwrPZmzVFAqI?97j)u#z0J3UMV3cF0`ecJM zUj#VeCi96PW%^Nm%lvtlx`_f7x%wntCez#-G>4V~fn#N%aYnq9xr=*qVEhKBPNYOK z+S{1oZjA%OjZx zh#zkoV!+J~KCLhz|0-`uyHOCBp5;_^*CXlfQ9-sn5=jSWyY9KUIp(>ALjgcaYlIcQ z;o|tDcCfE37}gmyyYSv6C8*PGKa@M~gR8hP&~?YZyPk8?^_!aytk|4CKVz_FGq6CR z=T1~kiI0?*vYAR;^fHx_HKtTQapi0NVQU0h&dPdQ3AC&Sw5&pAF9(tOwM&oV0>FL9 zU&(`X$Y06B{|lLyMDyaaM$k+y=2ErB5`0;BJXeGARLF7(7_ye~y|0Nk7&zYsVWk-2W&{|K;*-dqk9>^`@L@IH0U(DC9Y zJ`?(5u}lsfn1f*_KT1_$?Gb*?I3(E|Lgh0B+xU3oyC4w<_a}RafCxWW?ucLSi)UCT zB_nIx7i?iU=^~vZJq$Mx53}R9HySRHFK_yte2!0dUC0pLBcC>g zo<&aBS&pTxb{!}pZv@;8Zbp!?+)woZOcYU7lR9GYq=9$ZFjgSa1(Gm`(x`rSZ!dmo zT3Xh(PrJLjaW;;UlG*}CF6peqrZnW-&ox9nICCoI<0&}G!KG8W^Q~ElH#*4?j#QHCKYm$||Fq7vS>@$J}ZK;0z7|7*XpPSlQ zr$V>CUoa2qN{{ZW768VMV!V};z|Dr{S&c4;?KSFA29QXa)8!dkdDz;r*v-#qQ+-pf zs0xPmYU3AR;i<&+eR#CDuZTFA8^*Omm|r+z(G_m&R&}@}zbk&6-4%L^?0#zbR*MLe zCY6x1v`g5c%l^~F-gS#2O8ngD5I)tFZqP`jxq33IqXS2^NZRd!Li&jkk@93Ved~7| zQ4Dnn&EX;WvNd5ukcmmpOL;2pmd-Vs{#Ke5m0C8E8{a{s{dA$p15l7A55&ehc=gT9 z`U)P!^I9E#CY^L{HL_K0Ev(mWRJ~w%Di10^J!#Yy-v5{`Zi|CgUP%KClNd4(hMW?gTYlT;k zvW`@B&9K}f7ovCVGZ{{q9QUNY&Efp9vC(OO~B2$!DG~^ECsIIt0@Y- zSCI7t()Z9^qUqfDvsDs^V*Js;aQPE&PS-pF-J)U!f7~4!)lcA}7-@t>&(C*Bx+rMf zi6i{M6NvQZ7K+$v1#0>HUx97Mr1KcaT0Y|lwUV9OS6+CJfsVXQy4T5Zl z;Akf~=~I@|v6&aV4;L+l1&K}9&u2Y7N%@S(8oAA228?P?i)3BST!wdzl&K_jDg}Tdwt7y>p2Ej)RK7YNXFD-HQOa5;H^-fE43M!Eod3GaYIw($SSll_Dxd&xu+0*#d0xW?hOR^GOH T(AEWPp#-TYJyxugHxKy_rsckW literal 0 HcmV?d00001