Set-ExecutionPolicy Fun

Hm, I'm surprised this isn't included Out-Of-The-Box.  Let's say I have a new deployment of machines and I need to set the ExecutionPolicy for each of them.  Now, assuming I'm a domain admin, I should be able to do it remotely:

Function Enable-PowerShell {

    param (

        [string]$computerName = $env:computerName,

        [string]$mode = 'Unrestricted'

    );

   

    $modeHash = @{

        'Unrestricted' = 'Unrestricted';

        'RemoteSigned' = 'RemoteSigned';

        'AllSigned' = 'AllSigned';

        'Restricted' = 'Restricted';

        'Default' = 'Default';

        'Bypass' =  'Bypass'

    };

   

    if (!$modeHash[$mode]) {

        Write-Warning ("-mode $mode is not valid. Valid modes are {0}" -f [string]::Join(", ", $modeHash.Keys));

        return $null;

    }

    $mode = $modeHash[$mode];

   

    trap { continue; }
     

    $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computerName);

    if (!$reg) {

        Write-Warning "Unable to open remote registry on $computerName.";

        return $null;
    }

   

    $key = "SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell";

    $regKey= $reg.OpenSubKey($key, $true);

    if (!$regKey) {

        Write-Warning "Unable to open registry key $key on $computerName.";

        return $null;

    }

   

    $regkey.SetValue('ExecutionPolicy', $mode);

    if ($regkey.GetValue('ExecutionPolicy') -ne $mode) {

        Write-Waring "Unable to set PowerShell Execution Policy on $computerName to $mode";

         return $null;

    }

}