Write-SessionLockdown.ps1
function Write-SessionLockdown { <# .Synopsis Writes a script to lock down a session to a list of required commands .Description Writes a script to lock down a session to a list of required commands. This script can be at the end of a constrained runspace definiton .Example Write-SessionLockdown -RequiredCommands 'Write-Host' #> param( # One or more required commands [Parameter(Mandatory=$true,Position=0,ValueFromPipelineByPropertyName=$true)] [string[]] $RequiredCommands ) process { $ofs = "','" "`$requiredCommands = '$requiredCommands' " + @' $ExecutionContext.SessionState.Scripts.Clear() $ExecutionContext.SessionState.Applications.Clear() $commandsToProxyNames = @([Management.Automation.CommandMetaData]::GetRestrictedCommands("RemoteServer").Keys) $requiredCommands += $commandsToProxyNames Get-Command | ForEach-Object { $cmd = $_ if ($requiredCommands -notcontains $cmd.Name) { $Cmd.Visibility = 'Private' } if ($commandsToProxyNames -contains $cmd.Name) { $cmdMd = [Management.Automation.CommandMetaData]::GetRestrictedCommands("RemoteServer")[$cmd.Name] $proxy = [Management.Automation.ProxyCommand]::Create($cmdMd) . ([ScriptBLock]::Create( "function $($cmd.Name) { $proxy } " )) $cmd.Visibility = 'Private' } } $ExecutionContext.SessionState.LanguageMode = 'NoLanguage' '@ } } |