protected override void ProcessRecord()
        {
            string shellID         = base.Context.ShellID;
            string executionPolicy = SecuritySupport.GetExecutionPolicy(this.ExecutionPolicy);

            if (this.ShouldProcessPolicyChange(executionPolicy))
            {
                SecuritySupport.SetExecutionPolicy(this.executionPolicyScope, this.ExecutionPolicy, shellID);
                if (this.ExecutionPolicy != ExecutionPolicy.Undefined)
                {
                    string str = SecuritySupport.GetExecutionPolicy(shellID).ToString();
                    if (!string.Equals(str, executionPolicy, StringComparison.OrdinalIgnoreCase))
                    {
                        string      str1 = StringUtil.Format(ExecutionPolicyCommands.ExecutionPolicyOverridden, str);
                        string      executionPolicyOverriddenRecommendedAction = ExecutionPolicyCommands.ExecutionPolicyOverriddenRecommendedAction;
                        ErrorRecord errorRecord = new ErrorRecord(new SecurityException(), "ExecutionPolicyOverride", ErrorCategory.PermissionDenied, null);
                        errorRecord.ErrorDetails = new ErrorDetails(str1);
                        errorRecord.ErrorDetails.RecommendedAction = executionPolicyOverriddenRecommendedAction;
                        base.ThrowTerminatingError(errorRecord);
                    }
                }
                PSSQMAPI.UpdateExecutionPolicy(shellID, this.ExecutionPolicy);
                PSEtwLog.LogSettingsEvent(MshLog.GetLogContext(base.Context, base.MyInvocation), EtwLoggingStrings.ExecutionPolicyName, executionPolicy, null);
            }
        }
예제 #2
0
        /// <summary>
        /// Set the desired execution policy.
        /// </summary>
        protected override void ProcessRecord()
        {
            string shellId         = base.Context.ShellID;
            string executionPolicy = SecuritySupport.GetExecutionPolicy(ExecutionPolicy);

            if (ShouldProcessPolicyChange(executionPolicy))
            {
                try
                {
                    SecuritySupport.SetExecutionPolicy(_executionPolicyScope, ExecutionPolicy, shellId);
                }
                catch (UnauthorizedAccessException exception)
                {
                    OnAccessDeniedError(exception);
                }
                catch (System.Security.SecurityException exception)
                {
                    OnAccessDeniedError(exception);
                }

                // Ensure it is now the effective execution policy
                if (ExecutionPolicy != ExecutionPolicy.Undefined)
                {
                    string effectiveExecutionPolicy = SecuritySupport.GetExecutionPolicy(shellId).ToString();
                    if (!string.Equals(effectiveExecutionPolicy, executionPolicy, StringComparison.OrdinalIgnoreCase))
                    {
                        string message           = StringUtil.Format(ExecutionPolicyCommands.ExecutionPolicyOverridden, effectiveExecutionPolicy);
                        string recommendedAction = ExecutionPolicyCommands.ExecutionPolicyOverriddenRecommendedAction;

                        ErrorRecord errorRecord = new ErrorRecord(
                            new System.Security.SecurityException(),
                            "ExecutionPolicyOverride",
                            ErrorCategory.PermissionDenied,
                            null);

                        errorRecord.ErrorDetails = new ErrorDetails(message);
                        errorRecord.ErrorDetails.RecommendedAction = recommendedAction;
                        ThrowTerminatingError(errorRecord);
                    }
                }

#if !CORECLR
                PSEtwLog.LogSettingsEvent(MshLog.GetLogContext(Context, MyInvocation),
                                          EtwLoggingStrings.ExecutionPolicyName, executionPolicy, null);
#endif
            }
        }//End ProcessRecord()