예제 #1
0
        /// <summary>
        /// Retrieve the encoding parameter from the command line
        /// it throws if the encoding does not match the known ones.
        /// </summary>
        /// <returns>A System.Text.Encoding object (null if no encoding specified).</returns>
        internal static Encoding Convert(Cmdlet cmdlet, string encoding)
        {
            if (string.IsNullOrEmpty(encoding))
            {
                // no parameter passed, default to UTF8
                return(ClrFacade.GetDefaultEncoding());
            }

            Encoding foundEncoding;

            if (encodingMap.TryGetValue(encoding, out foundEncoding))
            {
                return(foundEncoding);
            }

            // error condition: unknown encoding value
            string validEncodingValues = string.Join(", ", TabCompletionResults);
            string msg = StringUtil.Format(PathUtilsStrings.OutFile_WriteToFileEncodingUnknown, encoding, validEncodingValues);

            ErrorRecord errorRecord = new ErrorRecord(
                PSTraceSource.NewArgumentException("Encoding"),
                "WriteToFileEncodingUnknown",
                ErrorCategory.InvalidArgument,
                null);

            errorRecord.ErrorDetails = new ErrorDetails(msg);
            cmdlet.ThrowTerminatingError(errorRecord);

            return(null);
        }
예제 #2
0
        internal static Encoding Convert(Cmdlet cmdlet, string encoding)
        {
            switch (encoding)
            {
            case "":
            case null:
                return(Encoding.Unicode);

            default:
                if (string.Equals(encoding, "unicode", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.Unicode);
                }
                if (string.Equals(encoding, "bigendianunicode", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.BigEndianUnicode);
                }
                if (string.Equals(encoding, "ascii", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.ASCII);
                }
                if (string.Equals(encoding, "utf8", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.UTF8);
                }
                if (string.Equals(encoding, "utf7", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.UTF7);
                }
                if (string.Equals(encoding, "utf32", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.UTF32);
                }
                if (string.Equals(encoding, "default", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.Default);
                }
                if (string.Equals(encoding, "oem", StringComparison.OrdinalIgnoreCase))
                {
                    return(Encoding.GetEncoding((int)EncodingConversion.NativeMethods.GetOEMCP()));
                }
                string str = string.Join(", ", new string[8]
                {
                    "unicode",
                    "bigendianunicode",
                    "ascii",
                    "utf8",
                    "utf7",
                    "utf32",
                    "default",
                    "oem"
                });
                string message = ResourceManagerCache.FormatResourceString("PathUtils", "OutFile_WriteToFileEncodingUnknown", (object)encoding, (object)str);
                cmdlet.ThrowTerminatingError(new ErrorRecord((Exception)EncodingConversion.tracer.NewArgumentException("Encoding"), "WriteToFileEncodingUnknown", ErrorCategory.InvalidArgument, (object)null)
                {
                    ErrorDetails = new ErrorDetails(message)
                });
                return((Encoding)null);
            }
        }
예제 #3
0
 private static void HandleErrorFromPipeline(Cmdlet cmdlet, ErrorRecord errorRecord, PowerShell powerShell)
 {
     if (!cmdlet.MyInvocation.ExpectingInput && (((powerShell.Runspace != null) && (powerShell.Runspace.RunspaceStateInfo.State != RunspaceState.Opened)) || ((powerShell.RunspacePool != null) && (powerShell.RunspacePool.RunspacePoolStateInfo.State != RunspacePoolState.Opened))))
     {
         cmdlet.ThrowTerminatingError(errorRecord);
     }
     cmdlet.WriteError(errorRecord);
 }
예제 #4
0
        internal static void ReportWildcardingFailure(Cmdlet cmdlet, string filePath)
        {
            string message = ResourceManagerCache.FormatResourceString(nameof(PathUtils), "OutFile_DidNotResolveFile", (object)filePath);

            cmdlet.ThrowTerminatingError(new ErrorRecord((Exception) new FileNotFoundException(), "FileOpenFailure", ErrorCategory.OpenError, (object)filePath)
            {
                ErrorDetails = new ErrorDetails(message)
            });
        }
예제 #5
0
        internal static void ReportMultipleFilesNotSupported(Cmdlet cmdlet)
        {
            string message = ResourceManagerCache.FormatResourceString(nameof(PathUtils), "OutFile_MultipleFilesNotSupported");

            cmdlet.ThrowTerminatingError(new ErrorRecord((Exception)PathUtils.tracer.NewInvalidOperationException(), "ReadWriteMultipleFilesNotSupported", ErrorCategory.InvalidArgument, (object)null)
            {
                ErrorDetails = new ErrorDetails(message)
            });
        }
예제 #6
0
        internal static void ReportWrongProviderType(Cmdlet cmdlet, string providerId)
        {
            string message = ResourceManagerCache.FormatResourceString(nameof(PathUtils), "OutFile_ReadWriteFileNotFileSystemProvider", (object)providerId);

            cmdlet.ThrowTerminatingError(new ErrorRecord((Exception)PathUtils.tracer.NewInvalidOperationException(), "ReadWriteFileNotFileSystemProvider", ErrorCategory.InvalidArgument, (object)null)
            {
                ErrorDetails = new ErrorDetails(message)
            });
        }
예제 #7
0
        internal static Encoding Convert(Cmdlet cmdlet, string encoding)
        {
            if ((encoding == null) || (encoding.Length == 0))
            {
                return(Encoding.Unicode);
            }
            if (string.Equals(encoding, "unknown", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.Unicode);
            }
            if (string.Equals(encoding, "string", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.Unicode);
            }
            if (string.Equals(encoding, "unicode", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.Unicode);
            }
            if (string.Equals(encoding, "bigendianunicode", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.BigEndianUnicode);
            }
            if (string.Equals(encoding, "ascii", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.ASCII);
            }
            if (string.Equals(encoding, "utf8", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.UTF8);
            }
            if (string.Equals(encoding, "utf7", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.UTF7);
            }
            if (string.Equals(encoding, "utf32", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.UTF32);
            }
            if (string.Equals(encoding, "default", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.Default);
            }
            if (string.Equals(encoding, "oem", StringComparison.OrdinalIgnoreCase))
            {
                return(Encoding.GetEncoding((int)NativeMethods.GetOEMCP()));
            }
            string      str         = string.Join(", ", new string[] { "unknown", "string", "unicode", "bigendianunicode", "ascii", "utf8", "utf7", "utf32", "default", "oem" });
            string      message     = StringUtil.Format(PathUtilsStrings.OutFile_WriteToFileEncodingUnknown, encoding, str);
            ErrorRecord errorRecord = new ErrorRecord(PSTraceSource.NewArgumentException("Encoding"), "WriteToFileEncodingUnknown", ErrorCategory.InvalidArgument, null)
            {
                ErrorDetails = new ErrorDetails(message)
            };

            cmdlet.ThrowTerminatingError(errorRecord);
            return(null);
        }
예제 #8
0
        internal static void ReportFileOpenFailure(Cmdlet cmdlet, string filePath, Exception e)
        {
            ErrorRecord errorRecord = new ErrorRecord(
                e,
                "FileOpenFailure",
                ErrorCategory.OpenError,
                null);

            cmdlet.ThrowTerminatingError(errorRecord);
        }
예제 #9
0
        internal static void ReportWrongProviderType(Cmdlet cmdlet, string providerId)
        {
            string      message     = StringUtil.Format(PathUtilsStrings.OutFile_ReadWriteFileNotFileSystemProvider, providerId);
            ErrorRecord errorRecord = new ErrorRecord(PSTraceSource.NewInvalidOperationException(), "ReadWriteFileNotFileSystemProvider", ErrorCategory.InvalidArgument, null)
            {
                ErrorDetails = new ErrorDetails(message)
            };

            cmdlet.ThrowTerminatingError(errorRecord);
        }
예제 #10
0
        internal static void ReportWildcardingFailure(Cmdlet cmdlet, string filePath)
        {
            string      message     = StringUtil.Format(PathUtilsStrings.OutFile_DidNotResolveFile, filePath);
            ErrorRecord errorRecord = new ErrorRecord(new FileNotFoundException(), "FileOpenFailure", ErrorCategory.OpenError, filePath)
            {
                ErrorDetails = new ErrorDetails(message)
            };

            cmdlet.ThrowTerminatingError(errorRecord);
        }
예제 #11
0
        internal static void ReportMultipleFilesNotSupported(Cmdlet cmdlet)
        {
            string      message     = StringUtil.Format(PathUtilsStrings.OutFile_MultipleFilesNotSupported, new object[0]);
            ErrorRecord errorRecord = new ErrorRecord(PSTraceSource.NewInvalidOperationException(), "ReadWriteMultipleFilesNotSupported", ErrorCategory.InvalidArgument, null)
            {
                ErrorDetails = new ErrorDetails(message)
            };

            cmdlet.ThrowTerminatingError(errorRecord);
        }
예제 #12
0
        private static IEnumerable <CimModule> GetCimModules(CimSession cimSession, Uri resourceUri, string cimNamespace, string moduleNamePattern, bool onlyManifests, Cmdlet cmdlet, CancellationToken cancellationToken)
        {
            Func <CimModule, CimModule> selector        = null;
            WildcardPattern             wildcardPattern = new WildcardPattern(moduleNamePattern, WildcardOptions.CultureInvariant | WildcardOptions.IgnoreCase);
            string optionValue          = WildcardPatternToDosWildcardParser.Parse(wildcardPattern);
            CimOperationOptions options = new CimOperationOptions {
                CancellationToken = new CancellationToken?(cancellationToken)
            };

            options.SetCustomOption("PS_ModuleNamePattern", optionValue, false);
            if (resourceUri != null)
            {
                options.ResourceUri = resourceUri;
            }
            if (string.IsNullOrEmpty(cimNamespace) && (resourceUri == null))
            {
                cimNamespace = "root/Microsoft/Windows/Powershellv3";
            }
            IEnumerable <CimModule> source = from cimInstance in cimSession.EnumerateInstances(cimNamespace, "PS_Module", options)
                                             select new CimModule(cimInstance) into cimModule
                                             where wildcardPattern.IsMatch(cimModule.ModuleName)
                                             select cimModule;

            if (!onlyManifests)
            {
                if (selector == null)
                {
                    selector = delegate(CimModule cimModule) {
                        cimModule.FetchAllModuleFiles(cimSession, cimNamespace, options);
                        return(cimModule);
                    };
                }
                source = source.Select <CimModule, CimModule>(selector);
            }
            return(EnumerateWithCatch <CimModule>(source, delegate(Exception exception) {
                ErrorRecord errorRecord = GetErrorRecordForRemoteDiscoveryProvider(exception);
                if (!cmdlet.MyInvocation.ExpectingInput && (((-1 != errorRecord.FullyQualifiedErrorId.IndexOf("DiscoveryProviderNotFound", StringComparison.OrdinalIgnoreCase)) || cancellationToken.IsCancellationRequested) || ((exception is OperationCanceledException) || !cimSession.TestConnection())))
                {
                    cmdlet.ThrowTerminatingError(errorRecord);
                }
                cmdlet.WriteError(errorRecord);
            }));
        }
예제 #13
0
        private static IEnumerable <CimModule> GetCimModules(
            CimSession cimSession,
            Uri resourceUri,
            string cimNamespace,
            string moduleNamePattern,
            bool onlyManifests,
            Cmdlet cmdlet,
            CancellationToken cancellationToken)
        {
            Dbg.Assert(cimSession != null, "Caller should verify cimSession != null");
            Dbg.Assert(moduleNamePattern != null, "Caller should verify that moduleNamePattern != null");

            const WildcardOptions wildcardOptions = WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant;
            var    wildcardPattern = WildcardPattern.Get(moduleNamePattern, wildcardOptions);
            string dosWildcard     = WildcardPatternToDosWildcardParser.Parse(wildcardPattern);

            var options = new CimOperationOptions {
                CancellationToken = cancellationToken
            };

            options.SetCustomOption("PS_ModuleNamePattern", dosWildcard, mustComply: false);
            if (resourceUri != null)
            {
                options.ResourceUri = resourceUri;
            }

            if (string.IsNullOrEmpty(cimNamespace) && (resourceUri == null))
            {
                cimNamespace = DiscoveryProviderNamespace;
            }

            // TODO/FIXME: ETW for method invocation
            IEnumerable <CimInstance> syncResults = cimSession.EnumerateInstances(
                cimNamespace,
                DiscoveryProviderModuleClass,
                options);
            // TODO/FIXME: ETW for method results
            IEnumerable <CimModule> cimModules = syncResults
                                                 .Select(cimInstance => new CimModule(cimInstance))
                                                 .Where(cimModule => wildcardPattern.IsMatch(cimModule.ModuleName));

            if (!onlyManifests)
            {
                cimModules = cimModules.Select(
                    delegate(CimModule cimModule)
                {
                    cimModule.FetchAllModuleFiles(cimSession, cimNamespace, options);
                    return(cimModule);
                });
            }

            return(EnumerateWithCatch(
                       cimModules,
                       delegate(Exception exception)
            {
                ErrorRecord errorRecord = GetErrorRecordForRemoteDiscoveryProvider(exception);
                if (!cmdlet.MyInvocation.ExpectingInput)
                {
                    if (((-1) != errorRecord.FullyQualifiedErrorId.IndexOf(DiscoveryProviderNotFoundErrorId, StringComparison.OrdinalIgnoreCase)) ||
                        (cancellationToken.IsCancellationRequested || (exception is OperationCanceledException)) ||
                        (!cimSession.TestConnection()))
                    {
                        cmdlet.ThrowTerminatingError(errorRecord);
                    }
                }
                cmdlet.WriteError(errorRecord);
            }));
        }
예제 #14
0
        /// <summary>
        /// retrieve the encoding paramater from the command line
        /// it throws if the encoding does not match the known ones
        /// </summary>
        /// <returns>a System.Text.Encoding object (null if no encoding specified)</returns>
        internal static Encoding Convert(Cmdlet cmdlet, string encoding)
        {
            if (string.IsNullOrEmpty(encoding))
            {
                // no parameter passed, default to Unicode (OS preferred)
                return(System.Text.Encoding.Unicode);
            }

            // Default to unicode (this matches Get-Content)
            if (string.Equals(encoding, Unknown, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.Unicode);
            }

            if (string.Equals(encoding, String, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.Unicode);
            }

            // these are the encodings the CLR supports
            if (string.Equals(encoding, Unicode, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.Unicode);
            }

            if (string.Equals(encoding, BigEndianUnicode, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.BigEndianUnicode);
            }

            if (string.Equals(encoding, Utf8, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.UTF8);
            }

            if (string.Equals(encoding, Ascii, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.ASCII);
            }

            if (string.Equals(encoding, Utf7, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.UTF7);
            }

            if (string.Equals(encoding, Utf32, StringComparison.OrdinalIgnoreCase))
            {
                return(System.Text.Encoding.UTF32);
            }

            if (string.Equals(encoding, Default, StringComparison.OrdinalIgnoreCase))
            {
                return(ClrFacade.GetDefaultEncoding());
            }

            if (string.Equals(encoding, OEM, StringComparison.OrdinalIgnoreCase))
            {
                return(ClrFacade.GetOEMEncoding());
            }

            // error condition: unknown encoding value
            string validEncodingValues = string.Join(
                ", ",
                new string[] { Unknown, String, Unicode, BigEndianUnicode, Ascii, Utf8, Utf7, Utf32, Default, OEM });
            string msg = StringUtil.Format(PathUtilsStrings.OutFile_WriteToFileEncodingUnknown,
                                           encoding, validEncodingValues);

            ErrorRecord errorRecord = new ErrorRecord(
                PSTraceSource.NewArgumentException("Encoding"),
                "WriteToFileEncodingUnknown",
                ErrorCategory.InvalidArgument,
                null);

            errorRecord.ErrorDetails = new ErrorDetails(msg);
            cmdlet.ThrowTerminatingError(errorRecord);

            return(null);
        }