<# .SYNOPSIS The TAB completion for functions and their arguments Version: v5.10.3 Date: 27.04.2021 Copyright (c) 2014–2021 farag Copyright (c) 2019–2021 farag & oZ-Zo Thanks to all https://forum.ru-board.com members involved .DESCRIPTION Dot source the script first: . .\Function.ps1 (with a dot at the beginning) Start typing any characters contained in the function's name or its arguments, and press the TAB button .EXAMPLE Sophia -Functions Sophia -Functions temp Sophia -Functions "DiagTrackService -Disable", "DiagnosticDataLevel -Minimal", UninstallUWPApps .NOTES Set execution policy to be able to run scripts only in the current PowerShell session: Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force .NOTES Separate functions with comma .NOTES https://forum.ru-board.com/topic.cgi?forum=62&topic=30617#15 https://habr.com/post/521202/ https://forums.mydigitallife.net/threads/powershell-windows-10-sophia-script.81675/ https://www.reddit.com/r/PowerShell/comments/go2n5v/powershell_script_setup_windows_10/ .LINK https://t.me/sophianews https://t.me/sophia_chat .LINK https://github.com/farag2 https://github.com/Inestic .LINK https://github.com/farag2/Windows-10-Sophia-Script #> function Sophia { [CmdletBinding()] param ( [Parameter(Mandatory = $false)] [string[]] $Functions ) # Regardless of the functions entered as an argument, the "Checkings" function will be executed first, and the "Refresh" and "Errors" functions will be executed at the end Invoke-Command -ScriptBlock {Checkings} foreach ($Function in $Functions) { Invoke-Expression -Command $Function } Invoke-Command -ScriptBlock {Refresh; Errors} } Clear-Host $Host.UI.RawUI.WindowTitle = "Windows 10 Sophia Script v5.10.3 | Made with $([char]::ConvertFromUtf32(0x1F497)) of Windows 10 | $([char]0x00A9) farag & oz-zo, 2014–2021" Remove-Module -Name Sophia -Force -ErrorAction Ignore Import-Module -Name $PSScriptRoot\Sophia.psd1 -PassThru -Force Import-LocalizedData -BindingVariable Global:Localization -FileName Sophia $Parameters = @{ CommandName = "Sophia" ParameterName = "Functions" ScriptBlock = { param ( $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters ) # Get functions list with arguments to complete $Commands = (Get-Module -Name Sophia).ExportedCommands.Keys foreach ($Command in $Commands) { $ParameterSets = (Get-Command -Name $Command).Parametersets.Parameters | Where-Object -FilterScript {$null -eq $_.Attributes.AliasNames} # If a module command is PinToStart if ($Command -eq "PinToStart") { # Get all command arguments, excluding defaults foreach ($ParameterSet in $ParameterSets.Name) { # If an argument is Tiles if ($ParameterSet -eq "Tiles") { $ValidValues = ((Get-Command -Name PinToStart).Parametersets.Parameters | Where-Object -FilterScript {$null -eq $_.Attributes.AliasNames}).Attributes.ValidValues foreach ($ValidValue in $ValidValues) { # The "PinToStart -Tiles " construction "PinToStart" + " " + "-" + $ParameterSet + " " + $ValidValue | Where-Object -FilterScript {$_ -like "*$wordToComplete*"} | ForEach-Object -Process {"`"$_`""} } # "PinToStart -Tiles " construction "PinToStart" + " " + "-" + $ParameterSet + " " + ($ValidValues -join ", ") | Where-Object -FilterScript {$_ -like "*$wordToComplete*"} | ForEach-Object -Process {"`"$_`""} } continue } } # If a module command is UninstallUWPApps if ($Command -eq "UninstallUWPApps") { (Get-Command -Name $Command).Name | Where-Object -FilterScript {$_ -like "*$wordToComplete*"} # Get all command arguments, excluding defaults foreach ($ParameterSet in $ParameterSets.Name) { # If an argument is ForAllUsers if ($ParameterSet -eq "ForAllUsers") { # The "UninstallUWPApps -ForAllUsers" construction "UninstallUWPApps" + " " + "-" + $ParameterSet | Where-Object -FilterScript {$_ -like "*$wordToComplete*"} | ForEach-Object -Process {"`"$_`""} } continue } } foreach ($ParameterSet in $ParameterSets.Name) { # The "Function -Argument" construction $Command + " " + "-" + $ParameterSet | Where-Object -FilterScript {$_ -like "*$wordToComplete*"} | ForEach-Object -Process {"`"$_`""} } # Get functions list without arguments to complete Get-Command -Name $Command | Where-Object -FilterScript {$null -eq $_.Parametersets.Parameters} | Where-Object -FilterScript {$_.Name -like "*$wordToComplete*"} } } } Register-ArgumentCompleter @Parameters Write-Information -MessageData "`n" -InformationAction Continue Write-Verbose -Message "Sophia -Functions " -Verbose Write-Verbose -Message "Sophia -Functions temp" -Verbose Write-Verbose -Message "Sophia -Functions `"DiagTrackService -Disable`", `"DiagnosticDataLevel -Minimal`", UninstallUWPApps" -Verbose Write-Information -MessageData "`n" -InformationAction Continue Write-Verbose -Message "UninstallUWPApps, `"PinToStart -UnpinAll`"" -Verbose