Copy all mapped files from [SD:725290]

commit 8cec8f150da7583b7af5efbe2853efee0179750c
This commit is contained in:
PowerShell Team 2016-07-28 23:23:03 -07:00 committed by Sergei Vorobev
parent d5f3fd3f83
commit c748652c34
242 changed files with 3458 additions and 6258 deletions

View File

@ -79,8 +79,6 @@ namespace Microsoft.PackageManagement.Providers.Internal.Bootstrap {
return Enumerable.Empty<Feed>();
}
#if !PORTABLE
// we don't do bootstrap on core powershell
if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
Warning(Constants.Messages.NetworkNotAvailable);
Warning(string.Format(CultureInfo.CurrentCulture, Resources.Messages.ProviderBootstrapFailed));
@ -96,7 +94,6 @@ namespace Microsoft.PackageManagement.Providers.Internal.Bootstrap {
Warning(Constants.Messages.ProviderSwidtagUnavailable);
return Enumerable.Empty<Feed>();
}
#endif
}
return _feeds;
}
@ -507,10 +504,6 @@ namespace Microsoft.PackageManagement.Providers.Internal.Bootstrap {
/// <returns></returns>
internal Package GetProviderFromFile(string filePath, bool copyFileToTemp = false, bool suppressErrorsAndWarnings = false) {
#if PORTABLE
// not supported on core powershell
return null;
#else
if (string.IsNullOrWhiteSpace(filePath) && !System.IO.File.Exists(filePath)) {
Warning(Constants.Messages.FileNotFound, filePath);
return null;
@ -571,7 +564,6 @@ namespace Microsoft.PackageManagement.Providers.Internal.Bootstrap {
}
return null;
#endif
}
/// <summary>
@ -700,4 +692,4 @@ namespace Microsoft.PackageManagement.Providers.Internal.Bootstrap {
}
}
}
}
}

View File

@ -134,8 +134,6 @@ namespace Microsoft.PackageManagement.MetaProvider.PowerShell.Internal {
if (_baseFolder == null || !Directory.Exists(_baseFolder)) {
throw new Exception(Resources.Messages.CantFindBasePowerShellModuleFolder);
}
_baseFolder = Path.Combine(_baseFolder, "Modules", "PackageManagement");
}
return _baseFolder;
}
@ -829,4 +827,4 @@ namespace Microsoft.PackageManagement.MetaProvider.PowerShell.Internal {
}
}
}
}
}

View File

@ -480,7 +480,7 @@
HashSet<PackageItem> temporarilyMarked = new HashSet<PackageItem>(new PackageItemComparer());
// checks that there are no dependency loop
hasDependencyLoop = !DepthFirstVisit(packageItem, temporarilyMarked, permanentlyMarked, dependencyToBeInstalled, new HashSet<string>(), request);
hasDependencyLoop = !DepthFirstVisit(packageItem, temporarilyMarked, permanentlyMarked, dependencyToBeInstalled, request);
if (!hasDependencyLoop)
{
@ -502,10 +502,9 @@
/// <param name="dependencyToBeInstalled"></param>
/// <param name="permanentlyMarked"></param>
/// <param name="temporarilyMarked"></param>
/// <param name="processedDependencies"></param>
/// <param name="request"></param>
/// <returns></returns>
internal static bool DepthFirstVisit(PackageItem packageItem, HashSet<PackageItem> temporarilyMarked, HashSet<PackageItem> permanentlyMarked, List<PackageItem> dependencyToBeInstalled, HashSet<string> processedDependencies, NuGetRequest request)
internal static bool DepthFirstVisit(PackageItem packageItem, HashSet<PackageItem> temporarilyMarked, HashSet<PackageItem> permanentlyMarked, List<PackageItem> dependencyToBeInstalled, NuGetRequest request)
{
// dependency loop detected because the element is temporarily marked
if (temporarilyMarked.Contains(packageItem))
@ -524,9 +523,9 @@
temporarilyMarked.Add(packageItem);
// Visit the dependency
foreach (var dependency in GetPackageDependenciesHelper(packageItem, processedDependencies, request))
foreach (var dependency in GetPackageDependenciesHelper(packageItem, request))
{
if (!DepthFirstVisit(dependency, temporarilyMarked, permanentlyMarked, dependencyToBeInstalled, processedDependencies, request))
if (!DepthFirstVisit(dependency, temporarilyMarked, permanentlyMarked, dependencyToBeInstalled, request))
{
// if dfs returns false then we have encountered a loop
return false;
@ -550,9 +549,8 @@
/// Returns the package dependencies of packageItem. We only return the dependencies that are not installed in the destination folder of request
/// </summary>
/// <param name="packageItem"></param>
/// <param name="processedDependencies"></param>
/// <param name="request"></param>
private static IEnumerable<PackageItem> GetPackageDependenciesHelper(PackageItem packageItem, HashSet<string> processedDependencies, NuGetRequest request)
private static IEnumerable<PackageItem> GetPackageDependenciesHelper(PackageItem packageItem, NuGetRequest request)
{
if (packageItem.Package.DependencySetList == null)
{
@ -569,13 +567,6 @@
foreach (var dep in depSet.Dependencies)
{
var depKey = string.Format(CultureInfo.InvariantCulture, "{0}!#!{1}", dep.Id, dep.DependencyVersion.ToStringSafe());
if (processedDependencies.Contains(depKey))
{
continue;
}
// Get the min dependencies version
string minVersion = dep.DependencyVersion.MinVersion.ToStringSafe();
@ -626,8 +617,6 @@
if (installed)
{
// already processed this so don't need to do this next time
processedDependencies.Add(dep.Id);
request.Verbose(String.Format(CultureInfo.CurrentCulture, Messages.AlreadyInstalled, dep.Id));
// already have a dependency so move on
continue;
@ -645,9 +634,7 @@
}
// Get the package that is the latest version
yield return dependentPackageItem.OrderByDescending(each => each.Version).FirstOrDefault();
processedDependencies.Add(depKey);
yield return dependentPackageItem.OrderByDescending(each => each.Version).FirstOrDefault();
}
}
}

View File

@ -20,8 +20,6 @@
using System.Net;
using Microsoft.PackageManagement.Provider.Utility;
using SemanticVersion = Microsoft.PackageManagement.Provider.Utility.SemanticVersion;
/// <summary>
/// This class drives the Request class that is an interface exposed from the PackageManagement Platform to the provider to use.
/// </summary>
@ -173,10 +171,6 @@
// or $env:programfiles\NuGet\Packages\ if you are an admin.
try
{
#if UNIX
// there is only 1 installation location by default for linux ("HOME/.local/share/powershell/PackageManagement/NuGet/Packages")
string basePath = CurrentUserDefaultInstallLocation;
#else
var scope = (Scope == null) ? null : Scope.Value;
scope = string.IsNullOrWhiteSpace(scope) ? Constants.AllUsers : scope;
string basePath;
@ -198,7 +192,6 @@
Constants.Messages.InstallRequiresCurrentUserScopeParameterForNonAdminUser, AllUserDefaultInstallLocation, CurrentUserDefaultInstallLocation);
return string.Empty;
}
#endif
if (!Directory.Exists(basePath))
{
@ -222,11 +215,7 @@
get
{
#if CORECLR
#if UNIX
return Path.Combine(Path.GetDirectoryName(Platform.SelectProductNameForDirectory(Platform.XDG_Type.DATA)), "PackageManagement", "NuGet", "Packages");
#else
return Path.Combine(Environment.GetEnvironmentVariable("LocalAppData"), "PackageManagement", "NuGet", "Packages");
#endif
#else
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PackageManagement", "NuGet", "Packages");
#endif
@ -239,11 +228,7 @@
get
{
#if CORECLR
#if UNIX
return Path.Combine(Path.GetDirectoryName(Platform.SelectProductNameForDirectory(Platform.XDG_Type.DATA)), "PackageManagement", "NuGet", "Packages");
#else
return Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles"), "NuGet", "Packages");
#endif
#else
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "NuGet", "Packages");
#endif
@ -1304,11 +1289,7 @@
}
} else {
#if UNIX
var appdataFolder = Path.GetDirectoryName(Platform.SelectProductNameForDirectory(Platform.XDG_Type.CONFIG));
#else
var appdataFolder = Environment.GetEnvironmentVariable("appdata");
#endif
_configurationFileLocation = Path.Combine(appdataFolder, "NuGet", NuGetConstant.SettingsFileName);
//create directory if does not exist

View File

@ -19,12 +19,6 @@
throw new ArgumentNullException("packageSource");
}
// we cannot call new uri on file path on linux because it will error out
if (System.IO.Directory.Exists(packageSource))
{
return new LocalPackageRepository(packageSource, request);
}
Uri uri = new Uri(packageSource);
if (uri.IsFile)

View File

@ -11,8 +11,6 @@ namespace Microsoft.PackageManagement.NuGetProvider
using System.Reflection;
using System.Management.Automation;
using SemanticVersion = Microsoft.PackageManagement.Provider.Utility.SemanticVersion;
/// <summary>
/// A Package provider to the PackageManagement Platform.
///

View File

@ -1,6 +1,4 @@
#if !UNIX
// Copyright (c) .NET Foundation. All rights reserved.
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@ -92,5 +90,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -29,7 +27,6 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
using Microsoft.PackageManagement.Provider.Utility;
using Microsoft.Win32;
using ErrorCategory = PackageManagement.Internal.ErrorCategory;
using SemanticVersion = Microsoft.PackageManagement.Provider.Utility.SemanticVersion;
internal static class ExePackageInstaller
{
@ -592,6 +589,4 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
// TODO do we need to support save-package for executable packages?
}
}
}
#endif
}

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -27,7 +25,6 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
using Microsoft.PackageManagement.Provider.Utility;
using ErrorCategory = PackageManagement.Internal.ErrorCategory;
using System.Globalization;
using SemanticVersion = Microsoft.PackageManagement.Provider.Utility.SemanticVersion;
internal static class NupkgInstaller {
@ -235,6 +232,4 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
}
#endif
}

View File

@ -1,6 +1,4 @@
#if !UNIX
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
@ -9,8 +7,6 @@ using Microsoft.PackageManagement.Provider.Utility;
using System.Reflection;
using System.Globalization;
using SemanticVersion = Microsoft.PackageManagement.Provider.Utility.SemanticVersion;
namespace Microsoft.PackageManagement.PackageSourceListProvider
{
internal static class JsonParser
@ -140,7 +136,7 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
else
{
throw new ArgumentException(string.Format("'{0}' is not referencd but not defined in the file '{1}'", dep.Name, package.FilePath));
throw new FileFormatException(string.Format("'{0}' is not referencd but not defined in the file '{1}'", dep.Name, package.FilePath));
}
}
@ -347,9 +343,9 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
if (!uri.IsFile)
{
if (uri.Scheme != "https")
if (uri.Scheme != Uri.UriSchemeHttps)
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.Messages.UriSchemeNotSupported, uri.Scheme, "https"));
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.Messages.UriSchemeNotSupported, uri.Scheme, Uri.UriSchemeHttps));
}
}
@ -494,5 +490,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -940,6 +938,4 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif
}

View File

@ -1,5 +1,3 @@
#if !UNIX
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
@ -34,7 +32,6 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
using Microsoft.PackageManagement.Implementation;
using Microsoft.PackageManagement.Internal.Api;
using Microsoft.PackageManagement.Provider.Utility;
using SemanticVersion = Microsoft.PackageManagement.Provider.Utility.SemanticVersion;
public abstract class PackageSourceListRequest : Request {
@ -1076,6 +1073,4 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
}
#endif
}

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -172,5 +170,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -43,5 +41,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -199,6 +197,4 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif
}

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -53,5 +51,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -301,5 +299,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif

View File

@ -1,6 +1,4 @@
#if !UNIX
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -212,6 +210,4 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
}
}
}
#endif
}

View File

@ -1,4 +1,3 @@
#if !UNIX
namespace Microsoft.PackageManagement.PackageSourceListProvider
{
@ -160,5 +159,3 @@ namespace Microsoft.PackageManagement.PackageSourceListProvider
#endregion
}
}
#endif

View File

@ -857,11 +857,6 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
Version maximumVersion,
ProviderOption providerOption = ProviderOption.LatestVersion) {
#if PORTABLE
return Enumerable.Empty<string>();
#else
//We don't need to scan provider assemblies on corepowershell.
//if provider is installed in providername\version format
var providerFolder = ProviderAssembliesLocation.Distinct(new PathEqualityComparer(PathCompareOption.Full)).SelectMany(Directory.EnumerateDirectories);
@ -967,20 +962,16 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
}
}
}
#endif
}
//Return all providers under the providerAssemblies folder
internal IEnumerable<string> AllProvidersFromProviderAssembliesLocation(IHostApi request) {
#if !PORTABLE
// don't need this for core powershell
try {
return ScanAllProvidersFromProviderAssembliesLocation(request, null, null, null, null, ProviderOption.AllProvider).WhereNotNull().ToArray();
} catch (Exception ex) {
request.Debug(ex.Message);
}
#endif
return Enumerable.Empty<string>();
}
@ -988,8 +979,6 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
//return the providers with latest version under the providerAssemblies folder
//This method only gets called during the initialization, i.e. LoadProviders().
private IEnumerable<string> ProvidersWithLatestVersionFromProviderAssembliesLocation(IHostApi request) {
#if !PORTABLE
// don't need this for core powershell
try {
var providerPaths = ScanAllProvidersFromProviderAssembliesLocation(request, null, null, null, null, ProviderOption.LatestVersion).WhereNotNull().ToArray();
@ -1022,8 +1011,6 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
{
request.Debug(ex.Message);
}
#endif
return Enumerable.Empty<string>();
}
@ -1042,14 +1029,28 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
.Concat(GetProvidersFromRegistry(Registry.LocalMachine, "SOFTWARE\\MICROSOFT\\PACKAGEMANAGEMENT"))
.Concat(GetProvidersFromRegistry(Registry.CurrentUser, "SOFTWARE\\MICROSOFT\\PACKAGEMANAGEMENT"));
providerAssemblies = providerAssemblies.Concat(ProvidersWithLatestVersionFromProviderAssembliesLocation(request));
#if DEEP_DEBUG
providerAssemblies = providerAssemblies.ToArray();
foreach (var each in providerAssemblies) {
request.Debug("possible assembly: {0}".format(each));
}
#endif
// find modules that have manifests
// todo: expand this out to validate the assembly is ok for this instance of PackageManagement.
providerAssemblies = providerAssemblies.Where(each => Manifest.LoadFrom(each).Any(manifest => Swidtag.IsSwidtag(manifest) && new Swidtag(manifest).IsApplicable(new Hashtable())));
// add inbox assemblies (don't require manifests, because they are versioned with the core)
#if !COMMUNITY_BUILD
// todo: these should just be strong-named references. for now, just load them from the same directory.
providerAssemblies = providerAssemblies.Concat(new[] {
Path.Combine(BaseDir, "Microsoft.PackageManagement.MetaProvider.PowerShell.dll"),
Path.Combine(BaseDir, "Microsoft.PackageManagement.ArchiverProviders.dll"),
Path.Combine(BaseDir, "Microsoft.PackageManagement.CoreProviders.dll"),
Path.Combine(BaseDir, "Microsoft.PackageManagement.NuGetProvider.dll"),
Path.Combine(BaseDir, "Microsoft.PackageManagement.PackageSourceListProvider.dll"),
Path.Combine(BaseDir, "Microsoft.PackageManagement.CoreProviders.dll"),
#if !CORECLR
Path.Combine(BaseDir, "Microsoft.PackageManagement.MsuProvider.dll"),
Path.Combine(BaseDir, "Microsoft.PackageManagement.MsiProvider.dll")
@ -1057,6 +1058,14 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
});
#endif
#if DEEP_DEBUG
providerAssemblies = providerAssemblies.ToArray();
foreach (var each in providerAssemblies) {
request.Debug("possible assembly with manifest: {0}".format(each));
}
#endif
providerAssemblies = providerAssemblies.OrderByDescending(each => {
try {
// try to get a version from the file first
@ -1602,4 +1611,4 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
return found;
}
}
}
}

View File

@ -81,7 +81,6 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
/// <param name="providerPath"></param>
public void SetSwidTag(string providerPath)
{
#if !UNIX
if (!string.IsNullOrWhiteSpace(providerPath))
{
// check whether there is swidtag attached to the provider path
@ -93,7 +92,6 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
SetSwidTag(new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), swid));
}
}
#endif
}
public IEnumerable<string> SupportedFileExtensions {
@ -209,4 +207,4 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
return new DynamicOptionRequestObject(this, requestObject, request => Provider.GetDynamicOptions(category.ToString(), request), category);
}
}
}
}

View File

@ -176,13 +176,9 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
Debug(request, "Calling 'ProviderService::IsSignedAndTrusted, '{0}'", filename);
// we are not using this function anywhere
#if !UNIX
var wtd = new WinTrustData(filename);
var result = NativeMethods.WinVerifyTrust(new IntPtr(-1), new Guid("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}"), wtd);
return result == WinVerifyTrustResult.Success;
#endif
}
return false;
}
@ -190,14 +186,9 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
public int StartProcess(string filename, string arguments, bool requiresElevation, out string standardOutput, IRequest requestObject) {
Process p = new Process();
#if !CORECLR
if (requiresElevation)
{
if (requiresElevation) {
p.StartInfo.UseShellExecute = true;
}
else
#endif
{
} else {
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
}
@ -242,4 +233,4 @@ namespace Microsoft.PackageManagement.Internal.Implementation {
return request.Debug(request.FormatMessageString(messageText, args));
}
}
}
}

View File

@ -19,11 +19,9 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
internal static class ExceptionExtensions {
public static void Dump(this Exception e) {
#if !UNIX
var text = string.Format(CultureInfo.CurrentCulture, "{0}/{1}\r\n{2}", e.GetType().Name, e.Message, e.StackTrace);
// for now, this is the only way we'll see exceptions in the wild.
NativeMethods.OutputDebugString(text);
#endif
}
#if DETAILED_DEBUG
@ -37,4 +35,4 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
}
#endif
}
}
}

View File

@ -74,14 +74,14 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
// move the file to the tmp file
// and tell the OS to remove it next reboot.
var tmpFilename = GenerateTemporaryFileOrDirectoryNameInTempDirectory() + ".delete_me"; // generates a unique filename but not a file!
File.Move(location, tmpFilename);
MoveFileOverwrite(location, tmpFilename);
if (File.Exists(location) || Directory.Exists(location)) {
// of course, if the tmpFile isn't on the same volume as the location, this doesn't work.
// then, last ditch effort, let's rename it in the current directory
// and then we can hide it and mark it for cleanup .
tmpFilename = Path.Combine(Path.GetDirectoryName(location), "tmp." + CounterHex + "." + Path.GetFileName(location) + ".delete_me");
File.Move(location, tmpFilename);
MoveFileOverwrite(location, tmpFilename);
if (File.Exists(tmpFilename) || Directory.Exists(location)) {
// hide the file for convenience.
File.SetAttributes(tmpFilename, File.GetAttributes(tmpFilename) | FileAttributes.Hidden);
@ -89,7 +89,7 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
}
// Now we mark the locked file to be deleted upon next reboot (or until another coapp app gets there)
File.Move(File.Exists(tmpFilename) ? tmpFilename : location, null);
MoveFileOverwrite(File.Exists(tmpFilename) ? tmpFilename : location, null);
} catch {
// really. Hmmm.
}
@ -101,6 +101,19 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
return;
}
/// <summary>
/// File move abstraction that can be implemented to handle non-windows platforms
/// </summary>
/// <param name="sourceFile"></param>
/// <param name="destinationFile"></param>
public static void MoveFileOverwrite(string sourceFile, string destinationFile) {
NativeMethods.MoveFileEx(sourceFile, destinationFile, MoveFileFlags.ReplaceExisting);
}
public static void MoveFileAtNextBoot(string sourceFile, string destinationFile) {
NativeMethods.MoveFileEx(sourceFile, destinationFile, MoveFileFlags.DelayUntilReboot);
}
/// <summary>
/// Create a temporary file name in the temp directory so we can move file that we cannot delete over
/// </summary>
@ -186,7 +199,6 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
// is this a unc path?
if (string.IsNullOrWhiteSpace(pathUri.Host)) {
#if !UNIX
// no, this is a drive:\path path
// use API to resolve out the drive letter to see if it is a remote
var drive = pathUri.Segments[1].Replace('/', '\\'); // the zero segment is always just '/'
@ -200,7 +212,6 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
return pathUri.Segments.Skip(2).Aggregate(sb.ToString().Trim(), (current, item) => current + item);
}
}
#endif
}
// not a remote (or resovably-remote) path or
// it is already a path that is in it's correct form (via localpath)
@ -254,4 +265,4 @@ namespace Microsoft.PackageManagement.Internal.Utility.Extensions {
return new Regex(@"-+").Replace(new Regex(@"[^\d\w\[\]_\-\.\ ]").Replace(input, "-"), "-").Replace(" ", "");
}
}
}
}

View File

@ -27,14 +27,10 @@ namespace Microsoft.PackageManagement.Internal.Utility.Platform {
/// </returns>
public static bool IsElevated {
get {
#if UNIX
return string.Equals(System.Environment.GetEnvironmentVariable("SUDO_UID"), "1000");
#else
var id = WindowsIdentity.GetCurrent();
var principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
#endif
}
}
}
}
}

View File

@ -22,7 +22,6 @@ namespace Microsoft.PackageManagement.Internal.Utility.Platform {
internal static class Manifest {
private static readonly byte[] _utf = {0xef, 0xbb, 0xbf};
#if !UNIX
public static IEnumerable<XElement> LoadFrom(string filename) {
var manifests = new List<XElement>();
@ -69,7 +68,5 @@ namespace Microsoft.PackageManagement.Internal.Utility.Platform {
}
return manifests;
}
#endif
}
}
}

View File

@ -12,7 +12,6 @@
// limitations under the License.
//
#if !UNIX
namespace Microsoft.PackageManagement.Internal.Utility.Platform {
using System;
using System.Diagnostics.CodeAnalysis;
@ -335,6 +334,4 @@ namespace Microsoft.PackageManagement.Internal.Utility.Platform {
public static extern void OutputDebugString(string debugMessageText);
#endif
}
}
#endif
}

View File

@ -192,7 +192,7 @@ namespace Microsoft.PackageManagement.Provider.Utility
#if !CORECLR
Marshal.ZeroFreeGlobalAllocUnicode(value);
#else
Marshal.ZeroFreeCoTaskMemUnicode(value);
SecureStringMarshal.ZeroFreeCoTaskMemUnicode(value);
#endif
}
}
@ -250,4 +250,4 @@ namespace Microsoft.PackageManagement.Provider.Utility
}
}
}
}

View File

@ -6,7 +6,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:conv="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
xmlns:sap="clr-namespace:System.Activities.Presentation"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

View File

@ -1,7 +1,7 @@
<swd:ActivityDesigner x:Class="Microsoft.PowerShell.Activities.PipelineDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:swd="clr-namespace:System.Activities.Presentation">
xmlns:swd="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation">
<Grid>
<Grid.RowDefinitions>

View File

@ -3,15 +3,19 @@ using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Resources;
using System.Reflection;
namespace Microsoft.PowerShell.Commands.Diagnostics.Common
{
internal static class CommonUtilities
internal class CommonUtilities
{
#if !CORECLR
//
// No-op private ctor to prevent the default ctor from getting generated.
// This class is intended to only have static members.
//
private CommonUtilities() { }
//
// StringArrayToString helper converts a string array into a comma-separated string.
// Note this has only limited use, individual strings cannot have commas.
@ -112,13 +116,7 @@ namespace Microsoft.PowerShell.Commands.Diagnostics.Common
}
return formatError;
}
#endif
public static ResourceManager GetResourceManager()
{
// this naming pattern is dictated by the dotnet cli
return new ResourceManager("Microsoft.PowerShell.Commands.Diagnostics.resources.GetEventResources", typeof(CommonUtilities).GetTypeInfo().Assembly);
}
}
}

View File

@ -145,7 +145,7 @@ namespace Microsoft.PowerShell.Commands.GetCounter
{
internal PerformanceCounterSampleSet()
{
_resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
_resourceMgr = new ResourceManager("GetEventResources", Assembly.GetExecutingAssembly());
}
internal PerformanceCounterSampleSet (DateTime timeStamp,

View File

@ -152,7 +152,7 @@ namespace Microsoft.PowerShell.Commands
protected override void BeginProcessing()
{
_resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
_resourceMgr = new ResourceManager("GetEventResources", Assembly.GetExecutingAssembly());
//
// Determine the OS version: this cmdlet requires Windows 7

View File

@ -203,7 +203,7 @@ namespace Microsoft.PowerShell.Commands
//
protected override void BeginProcessing()
{
_resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
_resourceMgr = new ResourceManager("GetEventResources", Assembly.GetExecutingAssembly());
_pdhHelper = new PdhHelper(System.Environment.OSVersion.Version.Major < 6);
uint res = _pdhHelper.ConnectToDataSource();

View File

@ -27,9 +27,9 @@ namespace Microsoft.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "WinEvent" , DefaultParameterSetName = "GetLogSet", HelpUri = "http://go.microsoft.com/fwlink/?LinkID=138336")]
public sealed class GetWinEventCommand : PSCmdlet
{
/// <summary>
/// ListLog parameter
/// </summary>
//
// ListLog parameter
//
[Parameter(
Position = 0,
Mandatory = true,
@ -51,9 +51,9 @@ namespace Microsoft.PowerShell.Commands
}
private string[] _listLog = {"*"};
/// <summary>
/// GetLog parameter
/// </summary>
//
// GetLog parameter
//
[Parameter(
Position = 0,
ParameterSetName="GetLogSet",
@ -73,9 +73,9 @@ namespace Microsoft.PowerShell.Commands
private string[] _logName = {"*"};
/// <summary>
/// ListProvider parameter
/// </summary>
//
// ListProvider parameter
//
[Parameter(
Position = 0,
Mandatory = true,
@ -99,9 +99,9 @@ namespace Microsoft.PowerShell.Commands
private string[] _listProvider = {"*"};
/// <summary>
/// ProviderName parameter
/// </summary>
//
// ProviderName parameter
//
[Parameter(
Position = 0,
Mandatory = true,
@ -123,9 +123,9 @@ namespace Microsoft.PowerShell.Commands
private string[] _providerName;
/// <summary>
/// Path parameter
/// </summary>
//
// Path parameter
//
[Parameter(
Position = 0,
Mandatory = true,
@ -147,9 +147,9 @@ namespace Microsoft.PowerShell.Commands
private string[] _path;
/// <summary>
/// MaxEvents parameter
/// </summary>
//
// MaxEvents parameter
//
[Parameter(
ParameterSetName="FileSet",
ValueFromPipeline = false,
@ -188,9 +188,9 @@ namespace Microsoft.PowerShell.Commands
}
private Int64 _maxEvents = -1;
/// <summary>
/// ComputerName parameter
/// </summary>
//
// ComputerName parameter
//
[Parameter(
ParameterSetName="ListProviderSet",
HelpMessageBaseName = "GetEventResources",
@ -225,9 +225,9 @@ namespace Microsoft.PowerShell.Commands
}
private string _computerName = string.Empty;
/// <summary>
/// Credential parameter
/// </summary>
//
// Credential parameter
//
[Parameter(ParameterSetName="ListProviderSet")]
[Parameter(ParameterSetName="GetProviderSet")]
[Parameter(ParameterSetName="ListLogSet")]
@ -244,9 +244,9 @@ namespace Microsoft.PowerShell.Commands
private PSCredential _credential = PSCredential.Empty;
/// <summary>
/// FilterXPath parameter
/// </summary>
//
// FilterXPath parameter
//
[Parameter(
ParameterSetName="FileSet",
ValueFromPipeline = false,
@ -270,9 +270,9 @@ namespace Microsoft.PowerShell.Commands
}
private string _filter = "*";
/// <summary>
/// FilterXml parameter
/// </summary>
//
// FilterXml parameter
//
[Parameter(
Position = 0,
Mandatory = true,
@ -294,9 +294,9 @@ namespace Microsoft.PowerShell.Commands
private XmlDocument _xmlQuery = null;
/// <summary>
/// FilterHashtable parameter
/// </summary>
//
// FilterHashtable parameter
//
[Parameter(
Position = 0,
Mandatory = true,
@ -317,9 +317,9 @@ namespace Microsoft.PowerShell.Commands
}
private Hashtable[] _selector;
/// <summary>
/// Force switch
/// </summary>
//
// Force switch
//
[Parameter(ParameterSetName="ListLogSet")]
[Parameter(ParameterSetName="GetProviderSet")]
[Parameter(ParameterSetName="GetLogSet")]
@ -332,9 +332,9 @@ namespace Microsoft.PowerShell.Commands
}
private SwitchParameter _force;
/// <summary>
/// Oldest switch
/// </summary>
//
// Oldest switch
//
[Parameter(ParameterSetName="FileSet")]
[Parameter(ParameterSetName="GetProviderSet")]
[Parameter(ParameterSetName="GetLogSet")]
@ -391,18 +391,18 @@ namespace Microsoft.PowerShell.Commands
private const string hashkey_data_lc="data";
/// <summary>
/// BeginProcessing() is invoked once per pipeline: we will load System.Core.dll here
/// </summary>
//
// BeginProcessing() is invoked once per pipeline: we will load System.Core.dll here
//
protected override void BeginProcessing()
{
_resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
_resourceMgr = new ResourceManager("GetEventResources", typeof(GetWinEventCommand).GetTypeInfo().Assembly);
}
/// <summary>
/// EndProcessing() is invoked once per pipeline
/// </summary>
//
// EndProcessing() is invoked once per pipeline
//
protected override void EndProcessing()
{
@ -426,10 +426,10 @@ namespace Microsoft.PowerShell.Commands
}
/// <summary>
/// ProcessRecord() override.
/// This is the main entry point for the cmdlet.
/// </summary>
//
// ProcessRecord() override.
// This is the main entry point for the cmdlet.
//
protected override void ProcessRecord()
{
switch (ParameterSetName)

View File

@ -189,7 +189,7 @@ namespace Microsoft.PowerShell.Commands
//
protected override void BeginProcessing()
{
_resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
_resourceMgr = new ResourceManager("GetEventResources", Assembly.GetExecutingAssembly());
_pdhHelper = new PdhHelper(System.Environment.OSVersion.Version.Major < 6);
}

View File

@ -13,7 +13,7 @@ using System.Diagnostics.CodeAnalysis;
using System.Collections.Generic;
using System.Xml;
using System.IO;
namespace Microsoft.PowerShell.Commands
{
///
@ -28,7 +28,7 @@ namespace Microsoft.PowerShell.Commands
private const string TemplateTag = "template";
private const string DataTag = "data";
private ResourceManager _resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
private ResourceManager _resourceMgr = new ResourceManager("GetEventResources", typeof(NewWinEventCommand).GetTypeInfo().Assembly);
/// <summary>

View File

@ -479,7 +479,6 @@ namespace Microsoft.Powershell.Commands.GetCounter.PdhNative
/// A helper reading in a Unicode string with embedded NULLs and splitting it into a StringCollection.
/// </summary>
/// <param name="strNative"></param>
/// <param name="strSize"></param>
/// <param name="strColl"></param>
private void ReadPdhMultiString(ref IntPtr strNative, Int32 strSize, ref StringCollection strColl)

View File

@ -96,7 +96,7 @@ namespace Microsoft.PowerShell.Cim
}
finally
{
Marshal.ZeroFreeCoTaskMemUnicode(plainTextString);
ClrFacade.ZeroFreeCoTaskMemUnicode(plainTextString);
}
}

View File

@ -1,5 +1,3 @@
#if !UNIX
/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
@ -7386,5 +7384,3 @@ $result
#endregion
}//End namespace
#endif

View File

@ -996,12 +996,6 @@ namespace Microsoft.PowerShell.Commands
try
{
// Change the current working directory
if (string.IsNullOrEmpty(Path))
{
// If user just typed 'cd', go to FileSystem provider home directory
Path = SessionState.Internal.GetSingleProvider(Commands.FileSystemProvider.ProviderName).Home;
}
result = SessionState.Path.SetLocation(Path, CmdletProviderContext);
}
catch (PSNotSupportedException notSupported)
@ -3568,22 +3562,7 @@ namespace Microsoft.PowerShell.Commands
}
bool shouldRecurse = Recurse;
bool treatAsFile = false;
try
{
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(providerPath);
if (!Platform.IsWindows && di != null && (di.Attributes & System.IO.FileAttributes.ReparsePoint) != 0)
{
shouldRecurse = false;
treatAsFile = true;
}
}
catch (System.IO.FileNotFoundException)
{
// not a directory
}
if (!treatAsFile && !Recurse && hasChildren)
if (!Recurse && hasChildren)
{
// Get the localized prompt string

View File

@ -540,7 +540,7 @@ namespace Microsoft.PowerShell.Commands
if (SessionState.Path.IsProviderQualified(path))
{
int index = path.IndexOf("::", StringComparison.CurrentCulture);
if (index != -1)
{
// remove the qualifier
@ -553,12 +553,9 @@ namespace Microsoft.PowerShell.Commands
if (SessionState.Path.IsPSAbsolute(path, out driveName))
{
var driveNameLength = driveName.Length;
if (path.Length > (driveNameLength + 1) && path[driveNameLength] == ':')
{
// Remove the drive name and colon
result = path.Substring(driveNameLength + 1);
}
// Remove the drive name and colon
result = path.Substring(driveName.Length + 1);
}
}

View File

@ -866,9 +866,6 @@ namespace Microsoft.PowerShell.Commands
private static string RetrieveProcessUserName(Process process, Cmdlet cmdlet)
{
string userName = null;
#if UNIX
userName = Platform.NonWindowsGetUserFromPid(process.Id);
#else
IntPtr tokenUserInfo = IntPtr.Zero;
IntPtr processTokenHandler = IntPtr.Zero;
@ -958,7 +955,6 @@ namespace Microsoft.PowerShell.Commands
}
}
#endif
return userName;
}
@ -1366,7 +1362,7 @@ namespace Microsoft.PowerShell.Commands
continue;
}
if (Platform.IsWindows && !Force)
if (!Force)
{
// Check if the process is owned by current user
if (!IsProcessOwnedByCurrentUser(process))
@ -2005,9 +2001,6 @@ namespace Microsoft.PowerShell.Commands
}
private SwitchParameter _UseNewEnvironment;
private StreamWriter OutputWriter;
private StreamWriter ErrorWriter;
#endregion
#region overrides
@ -2101,10 +2094,7 @@ namespace Microsoft.PowerShell.Commands
}
//LoadUserProfile.
if (Platform.IsWindows)
{
startInfo.LoadUserProfile = _loaduserprofile;
}
startInfo.LoadUserProfile = _loaduserprofile;
if (_credential != null)
{
@ -2196,30 +2186,8 @@ namespace Microsoft.PowerShell.Commands
}
#endif
//Starts the Process
Process process;
if (Platform.IsWindows)
{
process = start(startInfo);
}
else
{
process = new Process();
process.StartInfo = startInfo;
SetupInputOutputRedirection(process);
process.Start();
if (process.StartInfo.RedirectStandardOutput)
{
process.BeginOutputReadLine();
}
if (process.StartInfo.RedirectStandardError)
{
process.BeginErrorReadLine();
}
if (process.StartInfo.RedirectStandardInput)
{
WriteToStandardInput(process);
}
}
Process process = start(startInfo);
//Wait and Passthru Implementation.
if (_passthru.IsPresent)
@ -2242,27 +2210,20 @@ namespace Microsoft.PowerShell.Commands
{
if (!process.HasExited)
{
if (Platform.IsWindows)
waithandle = new ManualResetEvent(false);
// Create and start the job object
ProcessCollection jobObject = new ProcessCollection();
if (jobObject.AssignProcessToJobObject(process))
{
waithandle = new ManualResetEvent(false);
// Create and start the job object
ProcessCollection jobObject = new ProcessCollection();
if (jobObject.AssignProcessToJobObject(process))
{
// Wait for the job object to finish
jobObject.WaitOne(waithandle);
}
else if (!process.HasExited)
{
// WinBlue: 27537 Start-Process -Wait doesn't work in a remote session on Windows 7 or lower.
process.Exited += new EventHandler(myProcess_Exited);
process.EnableRaisingEvents = true;
process.WaitForExit();
}
// Wait for the job object to finish
jobObject.WaitOne(waithandle);
}
else
else if (!process.HasExited)
{
// WinBlue: 27537 Start-Process -Wait doesn't work in a remote session on Windows 7 or lower.
process.Exited += new EventHandler(myProcess_Exited);
process.EnableRaisingEvents = true;
process.WaitForExit();
}
}
@ -2321,104 +2282,6 @@ namespace Microsoft.PowerShell.Commands
}
}
private void StdOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (!String.IsNullOrEmpty(outLine.Data))
{
OutputWriter.WriteLine(outLine.Data);
OutputWriter.Flush();
}
}
private void StdErrorHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (!String.IsNullOrEmpty(outLine.Data))
{
ErrorWriter.WriteLine(outLine.Data);
ErrorWriter.Flush();
}
}
private void ExitHandler(object sendingProcess, System.EventArgs e)
{
// To avoid a race condition with Std*Handler, let's wait a bit before closing the streams
// System.Timer is not supported in CoreCLR, so let's spawn a new thread to do the wait
Thread delayedStreamClosing = new Thread(StreamClosing);
delayedStreamClosing.Start();
}
private void StreamClosing()
{
Thread.Sleep(1000);
if (OutputWriter != null)
{
OutputWriter.Dispose();
}
if (ErrorWriter != null)
{
ErrorWriter.Dispose();
}
}
private void SetupInputOutputRedirection(Process p)
{
if (_redirectstandardinput != null)
{
p.StartInfo.RedirectStandardInput = true;
_redirectstandardinput = ResolveFilePath(_redirectstandardinput);
}
else
{
p.StartInfo.RedirectStandardInput = false;
}
if (_redirectstandardoutput != null)
{
p.StartInfo.RedirectStandardOutput = true;
_redirectstandardoutput = ResolveFilePath(_redirectstandardoutput);
p.OutputDataReceived += new DataReceivedEventHandler(StdOutputHandler);
// Can't do StreamWriter(string) in coreCLR
OutputWriter = new StreamWriter(new FileStream(_redirectstandardoutput, FileMode.Create));
}
else
{
p.StartInfo.RedirectStandardOutput = false;
OutputWriter = null;
}
if (_redirectstandarderror != null)
{
p.StartInfo.RedirectStandardError = true;
_redirectstandarderror = ResolveFilePath(_redirectstandarderror);
p.ErrorDataReceived += new DataReceivedEventHandler(StdErrorHandler);
// Can't do StreamWriter(string) in coreCLR
ErrorWriter = new StreamWriter(new FileStream(_redirectstandarderror, FileMode.Create));
}
else
{
p.StartInfo.RedirectStandardError = false;
ErrorWriter = null;
}
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(ExitHandler);
}
private void WriteToStandardInput(Process p)
{
StreamWriter writer = p.StandardInput;
using (StreamReader reader = new StreamReader(new FileStream(_redirectstandardinput, FileMode.Open)))
{
string line = reader.ReadToEnd();
writer.WriteLine(line);
}
writer.Dispose();
}
private Process StartWithCreateProcess(ProcessStartInfo startinfo)
{
@ -2578,7 +2441,7 @@ namespace Microsoft.PowerShell.Commands
{
if (password != IntPtr.Zero)
{
Marshal.ZeroFreeCoTaskMemUnicode(password);
ClrFacade.ZeroFreeCoTaskMemUnicode(password);
}
}
}//end of if

View File

@ -2230,7 +2230,7 @@ namespace Microsoft.PowerShell.Commands
{
if (IntPtr.Zero != password)
{
Marshal.ZeroFreeCoTaskMemUnicode(password);
ClrFacade.ZeroFreeCoTaskMemUnicode(password);
}
if (IntPtr.Zero != hService)

View File

@ -1,5 +1,3 @@
#if !UNIX
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@ -862,5 +860,3 @@ namespace Microsoft.PowerShell.Commands
}
}
}
#endif

View File

@ -1059,37 +1059,23 @@ namespace Microsoft.PowerShell.Commands
private static PortableExecutableReference ObjectImplementationAssemblyReference =
MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location);
private static PortableExecutableReference MscorlibAssemblyReference =
MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location);
private static PortableExecutableReference ObjectDeclaredAssemblyReference =
MetadataReference.CreateFromFile(System.IO.Path.Combine(FrameworkFolder, "System.Runtime.dll"));
// This assembly should be System.Runtime.dll
private static PortableExecutableReference SystemRuntimeAssemblyReference =
MetadataReference.CreateFromFile(ClrFacade.GetAssemblies(typeof(object).FullName).First().Location);
// SecureString is defined in a separate assembly.
// CoreCLR RC2 bits don't have SecureString. We are using a separate assembly with SecureString implementation.
// This fact is an implementation detail and should not require the user to specify one more assembly,
// if they want to use SecureString in Add-Type -TypeDefinition.
// So this assembly should be in the default assemblies list to provide the best experience.
//
// TODO: This reference should be removed, if we take CoreCLR version that has SecureString implementation.
private static PortableExecutableReference SecureStringAssemblyReference =
MetadataReference.CreateFromFile(typeof(System.Security.SecureString).GetTypeInfo().Assembly.Location);
// These assemlbies are always automatically added to ReferencedAssemblies.
private static PortableExecutableReference[] autoReferencedAssemblies = new PortableExecutableReference[]
private static MetadataReference[] defaultAssemblies = new MetadataReference[]
{
MscorlibAssemblyReference,
SystemRuntimeAssemblyReference,
SecureStringAssemblyReference,
ObjectImplementationAssemblyReference
};
// These assemlbies are used, when ReferencedAssemblies parameter is not specified.
private static PortableExecutableReference[] defaultAssemblies = new PortableExecutableReference[]
{
MscorlibAssemblyReference,
SystemRuntimeAssemblyReference,
SecureStringAssemblyReference,
ObjectImplementationAssemblyReference,
ObjectDeclaredAssemblyReference,
SecureStringAssemblyReference,
MetadataReference.CreateFromFile(typeof(PSObject).GetTypeInfo().Assembly.Location)
};
@ -1161,7 +1147,7 @@ namespace Microsoft.PowerShell.Commands
// First try by strong name
try
{
loadedAssembly = Assembly.Load(new AssemblyName(assemblyName));
loadedAssembly = System.Reflection.Assembly.Load(new AssemblyName(assemblyName));
}
// Generates a FileNotFoundException if you can't load the strong type.
// So we'll try from the short name.
@ -1231,8 +1217,9 @@ namespace Microsoft.PowerShell.Commands
if (referencedAssembliesSpecified)
{
var tempReferences = ReferencedAssemblies.Select(a => MetadataReference.CreateFromFile(ResolveReferencedAssembly(a))).ToList();
tempReferences.AddRange(autoReferencedAssemblies);
tempReferences.Add(ObjectImplementationAssemblyReference);
tempReferences.Add(ObjectDeclaredAssemblyReference);
tempReferences.Add(SecureStringAssemblyReference);
references = tempReferences.ToArray();
}
@ -1944,7 +1931,7 @@ namespace Microsoft.PowerShell.Commands
{
foreach(string path in paths)
{
generatedTypes.AddRange(ClrFacade.LoadFrom(path).GetTypes());
generatedTypes.AddRange(System.Reflection.Assembly.LoadFrom(path).GetTypes());
}
}
// Load the assembly by name
@ -2062,7 +2049,7 @@ namespace Microsoft.PowerShell.Commands
// First try by strong name
try
{
loadedAssembly = Assembly.Load(assemblyName);
loadedAssembly = System.Reflection.Assembly.Load(assemblyName);
}
// Generates a FileNotFoundException if you can't load the strong type.
// So we'll try from the short name.
@ -2074,7 +2061,7 @@ namespace Microsoft.PowerShell.Commands
// Next, try an exact match
if (StrongNames.Value.ContainsKey(assemblyName))
{
return Assembly.Load(StrongNames.Value[assemblyName]);
return System.Reflection.Assembly.Load(StrongNames.Value[assemblyName]);
}
// If the assembly name doesn't contain wildcards, return null. The caller generates an error here.
@ -2117,7 +2104,7 @@ namespace Microsoft.PowerShell.Commands
return null;
// Otherwise, load the assembly.
return Assembly.Load(matchedStrongName);
return System.Reflection.Assembly.Load(matchedStrongName);
}
private static ConcurrentDictionary<string, string> InitializeStrongNameDictionary()

View File

@ -294,11 +294,18 @@ namespace Microsoft.PowerShell.Commands
}
CultureInfo currentCulture = culture;
StringBuilder stringBuilder;
string filePath;
string fullFileName = fileName + ".psd1";
while (currentCulture != null && !String.IsNullOrEmpty(currentCulture.Name))
{
filePath = Path.Combine(dir, currentCulture.Name, fullFileName);
stringBuilder = new StringBuilder(dir);
stringBuilder.Append("\\");
stringBuilder.Append(currentCulture.Name);
stringBuilder.Append("\\");
stringBuilder.Append(fileName);
stringBuilder.Append(".psd1");
filePath = stringBuilder.ToString();
if (File.Exists(filePath))
{
@ -308,7 +315,12 @@ namespace Microsoft.PowerShell.Commands
currentCulture = currentCulture.Parent;
}
filePath = Path.Combine(dir, fullFileName);
stringBuilder = new StringBuilder(dir);
stringBuilder.Append("\\");
stringBuilder.Append(fileName);
stringBuilder.Append(".psd1");
filePath = stringBuilder.ToString();
if (File.Exists(filePath))
{
@ -318,11 +330,11 @@ namespace Microsoft.PowerShell.Commands
InvalidOperationException ioe =
PSTraceSource.NewInvalidOperationException(
ImportLocalizedDataStrings.CannotFindPsd1File,
fullFileName,
Path.Combine(dir, culture.Name)
fileName + ".psd1",
dir + "\\" + culture.Name + "\\"
);
WriteError(new ErrorRecord(ioe, "ImportLocalizedData", ErrorCategory.ObjectNotFound,
Path.Combine(dir, culture.Name, fullFileName)));
dir + "\\" + culture.Name + "\\" + fileName + ".psd1"));
return null;
}

View File

@ -156,7 +156,7 @@ namespace Microsoft.PowerShell.Commands
/// Returns the base name of the file containing the matching line.
/// <remarks>
/// It will be the string "InputStream" if the object came from the input stream.
/// This is a readonly property calculated from the path. <see cref="Path"/>
/// This is a readonly propery calculated from <paramref name="Path"/>.
/// </remarks>
/// </summary>
/// <value>The file name</value>

View File

@ -261,7 +261,7 @@ namespace Microsoft.PowerShell.Commands
private SwitchParameter usessl;
/// <summary>
/// Specifies the Port to be used on the server. <see cref="SmtpServer"/>
/// Specifies the Port to be used on <paramref name="SmtpServer"/>
/// </summary>
/// <remarks>
/// Value must be greater than zero.

View File

@ -117,28 +117,21 @@ namespace Microsoft.PowerShell.Commands
if ( ShouldProcess( dateToUse.ToString() ) )
{
if (Platform.IsWindows)
#pragma warning disable 56523
if (!NativeMethods.SetLocalTime(ref systemTime))
{
#pragma warning disable 56523
if (!NativeMethods.SetLocalTime(ref systemTime))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
// MSDN says to call this twice to account for changes
// between DST
if (!NativeMethods.SetLocalTime(ref systemTime))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
#pragma warning restore 56523
throw new Win32Exception(Marshal.GetLastWin32Error());
}
else
// MSDN says to call this twice to account for changes
// between DST
if (!NativeMethods.SetLocalTime(ref systemTime))
{
Platform.NonWindowsSetDate(dateToUse);
throw new Win32Exception(Marshal.GetLastWin32Error());
}
#pragma warning restore 56523
}
//output DateTime object wrapped in an PSObject with DisplayHint attached

View File

@ -1,5 +1,3 @@
#if !CORECLR
/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
@ -508,4 +506,3 @@ namespace Microsoft.PowerShell.Commands
}
}
}
#endif

View File

@ -12,9 +12,7 @@ using System.Collections;
using System.Globalization;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
#if !CORECLR
using mshtml;
#endif
using Microsoft.Win32;
namespace Microsoft.PowerShell.Commands
@ -465,12 +463,9 @@ namespace Microsoft.PowerShell.Commands
/// needed if an HtmlDocument will be created shortly.</param>
protected bool VerifyInternetExplorerAvailable(bool checkComObject)
{
// TODO: Remove this code once the dependecy on mshtml has been resolved.
#if CORECLR
return false;
#else
bool isInternetExplorerConfigurationComplete = false;
// Check for IE for both PS Full and PS Core on windows.
#if !LINUX // Check for IE for both PS Full and PS Core on windows.
// The registry key DisableFirstRunCustomize can exits at one of the following path.
// IE uses the same decending orider (as mentioned) to check for the presence of this key.
// If the value of DisableFirstRunCustomize key is set to greater than zero then Run first
@ -524,12 +519,15 @@ namespace Microsoft.PowerShell.Commands
isInternetExplorerConfigurationComplete = false;
}
}
#endif
#if !CORECLR
// Throw exception in PS Full only
if (!isInternetExplorerConfigurationComplete)
throw new NotSupportedException(WebCmdletStrings.IEDomNotSupported);
return isInternetExplorerConfigurationComplete;
#endif
return isInternetExplorerConfigurationComplete;
}
private Uri PrepareUri(Uri uri)

View File

@ -93,12 +93,6 @@ namespace Microsoft.PowerShell.Commands
// The first input string does not represent a complete Json Syntax.
// Hence consider the the entire input as a single Json content.
}
#if CORECLR
catch (Newtonsoft.Json.JsonSerializationException)
{
// we use another serializer for CORECLR implementation
}
#endif
if (successfullyConverted)
{
for (int index = 1; index < inputObjectBuffer.Count; index++)

View File

@ -60,13 +60,6 @@ namespace Microsoft.PowerShell.Commands
this.RawContent = raw.ToString();
}
/// <summary>
/// Dispose the the instance of the class.
/// </summary>
public void Dispose()
{
GC.SuppressFinalize(this);
}
#endregion
}
}

View File

@ -226,7 +226,6 @@ namespace Microsoft.PowerShell.Commands
content = psBody.BaseObject;
}
/* TODO: This needs to be enable after the dependency on mshtml is resolved.
var html = content as HtmlWebResponseObject;
if (html != null)
{
@ -237,9 +236,6 @@ namespace Microsoft.PowerShell.Commands
}
}
else if (content is FormObject)
*/
if (content is FormObject)
{
FormObject form = content as FormObject;
SetRequestContent(request, form.Fields);
@ -535,7 +531,7 @@ namespace Microsoft.PowerShell.Commands
}
#endregion Helper Methods
#endregion Helper Methods
}
}
#endif

View File

@ -17,17 +17,14 @@ namespace Microsoft.PowerShell.Commands
WebResponseObject output;
if (WebResponseHelper.IsText(response))
{
output = new BasicHtmlWebResponseObject(response, responseStream);
// TODO: This code needs to be enable after the dependency on mshtml is resolved.
//if (useBasicParsing)
//{
// output = new BasicHtmlWebResponseObject(response, responseStream);
//}
//else
//{
// output = new HtmlWebResponseObject(response, responseStream, executionContext);
//}
if (useBasicParsing)
{
output = new BasicHtmlWebResponseObject(response, responseStream);
}
else
{
output = new HtmlWebResponseObject(response, responseStream, executionContext);
}
}
else
{

View File

@ -23,7 +23,7 @@ namespace Microsoft.PowerShell.Commands
set { DescendingOrder = value; }
}
/// <summary>
/// This param specifies if only unique objects are filtered.
///
/// </summary>
/// <value></value>
[Parameter]
@ -37,7 +37,7 @@ namespace Microsoft.PowerShell.Commands
/// <summary>
/// Remove duplicates.
/// Remove Duplicated from <paramref name="sortedList"/>
/// </summary>
private static void RemoveDuplicates(OrderByProperty orderByProperty)
{

View File

@ -58,3 +58,4 @@ namespace Microsoft.PowerShell.Commands
#endregion Cmdlet code
}
}

View File

@ -3,17 +3,12 @@ Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
using System;
using System.IO;
using System.Security.Permissions;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Internal.Host;
#if CORECLR
using Microsoft.PowerShell.CoreClr.Stubs;
#else
using System.Security.Permissions;
#endif
namespace Microsoft.PowerShell.Commands
{
/// <summary>
@ -68,9 +63,6 @@ namespace Microsoft.PowerShell.Commands
[SecurityPermission(SecurityAction.LinkDemand)]
protected override void Dispose(bool disposing)
{
#if CORECLR
base.Dispose(disposing);
#else
try
{
if (disposing)
@ -82,10 +74,8 @@ namespace Microsoft.PowerShell.Commands
{
base.Dispose(disposing);
}
#endif
}
#if !CORECLR
/// <summary>
/// Closes the dialog and then calls the base class Close
/// </summary>
@ -96,7 +86,6 @@ namespace Microsoft.PowerShell.Commands
base.Close();
}
#endif
#endregion TraceListener constructors and disposer
@ -154,3 +143,4 @@ namespace Microsoft.PowerShell.Commands
} // class PSHostTraceListener
} // namespace System.Management.Automation

View File

@ -185,3 +185,4 @@ namespace Microsoft.PowerShell.Commands
#endregion Cmdlet code
}
}

View File

@ -133,3 +133,4 @@ namespace Microsoft.PowerShell.Commands
}
}
}

View File

@ -333,7 +333,7 @@ namespace Microsoft.PowerShell.Commands
foreach (FileStream fileStream in this.FileStreams)
{
fileStream.Flush();
fileStream.Dispose();
fileStream.Close();
}
}
GC.SuppressFinalize(this);
@ -572,3 +572,4 @@ namespace Microsoft.PowerShell.Commands
private Collection<PSTraceSource> matchingSources = new Collection<PSTraceSource>();
}
}

View File

@ -460,7 +460,7 @@ namespace Microsoft.PowerShell.Commands
true))
{
listenerToRemove.Flush();
listenerToRemove.Dispose();
listenerToRemove.Close();
source.Listeners.RemoveAt(index);
}
}
@ -619,7 +619,7 @@ namespace Microsoft.PowerShell.Commands
foreach (TraceListener listener in pair.Value)
{
listener.Flush();
listener.Dispose();
listener.Close();
}
}
storedTraceSourceState.Clear ();
@ -631,3 +631,4 @@ namespace Microsoft.PowerShell.Commands
#endregion stored state
}
}

View File

@ -353,12 +353,6 @@ namespace Microsoft.PowerShell
switchKey = switchKey.Substring(1);
// chop off the second dash so we're agnostic wrt specifying - or --
if (!String.IsNullOrEmpty(switchKey) && SpecialCharacters.IsDash(switchKey[0]))
{
switchKey = switchKey.Substring(1);
}
if (MatchSwitch(switchKey, "help", "h") || MatchSwitch(switchKey, "?", "?"))
{
showHelp = true;
@ -483,10 +477,7 @@ namespace Microsoft.PowerShell
string exceptionMessage = null;
try
{
// Normalize slashes
file = args[i].Replace(StringLiterals.AlternatePathSeparator,
StringLiterals.DefaultPathSeparator);
file = Path.GetFullPath(file);
file = Path.GetFullPath(args[i]);
}
catch (Exception e)
{

View File

@ -1,4 +1,3 @@
#if !UNIX
/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
@ -3608,4 +3607,4 @@ namespace Microsoft.PowerShell
private static PSTraceSource tracer = PSTraceSource.GetTracer("ConsoleControl", "Console control methods");
}
} // namespace
#endif

View File

@ -180,22 +180,13 @@ namespace Microsoft.PowerShell
try
{
string profileDir;
if (Platform.IsWindows)
{
profileDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) +
@"\Microsoft\Windows\PowerShell";
var profileDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) +
@"\Microsoft\Windows\PowerShell";
if (!Directory.Exists(profileDir))
{
Directory.CreateDirectory(profileDir);
}
}
else
if (!Directory.Exists(profileDir))
{
profileDir = Platform.SelectProductNameForDirectory(Platform.XDG_Type.CACHE);
Directory.CreateDirectory(profileDir);
}
ClrFacade.SetProfileOptimizationRoot(profileDir);
}
catch
@ -270,6 +261,7 @@ namespace Microsoft.PowerShell
: "StartupProfileData-NonInteractive");
exitCode = theConsoleHost.Run(cpp, !string.IsNullOrEmpty(preStartWarning));
}
}
finally
{
@ -286,32 +278,10 @@ namespace Microsoft.PowerShell
#if UNIX
/// <summary>
///
///
/// The break handler for the program. Dispatches a break event to the current Executor.
///
/// </summary>
private static void MyBreakHandler(object sender, ConsoleCancelEventArgs args)
{
// Set the Cancel property to true to prevent the process from terminating.
args.Cancel = true;
switch (args.SpecialKey)
{
case ConsoleSpecialKey.ControlC:
SpinUpBreakHandlerThread(false);
return;
case ConsoleSpecialKey.ControlBreak:
// Break into script debugger.
BreakIntoDebugger();
return;
}
}
#else
/// <summary>
///
/// The break handler for the program. Dispatches a break event to the current Executor.
///
///
/// </summary>
/// <param name="signal"></param>
/// <returns></returns>
@ -347,7 +317,6 @@ namespace Microsoft.PowerShell
return false;
}
}
#endif
private static bool BreakIntoDebugger()
{
@ -466,10 +435,8 @@ namespace Microsoft.PowerShell
// call the console APIs directly, instead of ui.rawui.FlushInputHandle, as ui may be finalized
// already if this thread is lagging behind the main thread.
#if !UNIX
ConsoleHandle handle = ConsoleControl.GetConioDeviceHandle();
ConsoleControl.FlushConsoleInputBuffer(handle);
#endif
ConsoleHost.SingletonInstance.breakHandlerThread = null;
}
@ -1064,12 +1031,8 @@ namespace Microsoft.PowerShell
private void BindBreakHandler()
{
#if UNIX
Console.CancelKeyPress += new ConsoleCancelEventHandler(MyBreakHandler);
#else
breakHandlerGcHandle = GCHandle.Alloc(new ConsoleControl.BreakHandler(MyBreakHandler));
ConsoleControl.AddBreakHandler((ConsoleControl.BreakHandler)breakHandlerGcHandle.Target);
#endif
}
#if !CORECLR // Not used on NanoServer: CurrentDomain.UnhandledException not supported on CoreCLR
@ -1123,11 +1086,9 @@ namespace Microsoft.PowerShell
{
if (!isDisposed)
{
#if !UNIX
Dbg.Assert(breakHandlerGcHandle != null, "break handler should be set");
ConsoleControl.RemoveBreakHandler();
breakHandlerGcHandle.Free();
#endif
if (isDisposingNotFinalizing)
{
@ -1570,7 +1531,7 @@ namespace Microsoft.PowerShell
{
// Create and open Runspace with PSReadline.
defaultImportModulesList = DefaultInitialSessionState.Modules;
DefaultInitialSessionState.ImportPSModule(new[] { "PSReadLine" });
DefaultInitialSessionState.ImportPSModule(new[] { "PSReadline" });
consoleRunspace = RunspaceFactory.CreateRunspace(this, DefaultInitialSessionState);
try
{
@ -2872,9 +2833,7 @@ namespace Microsoft.PowerShell
/// </summary>
private RunspaceRef runspaceRef;
#if !UNIX
private GCHandle breakHandlerGcHandle;
#endif
private System.Threading.Thread breakHandlerThread;
private bool isDisposed;
internal ConsoleHostUserInterface ui;

View File

@ -1,4 +1,3 @@
#if !UNIX
/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
@ -1500,359 +1499,3 @@ namespace Microsoft.PowerShell
}
} // namespace
#else
// Managed code only implementation for portability
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Management.Automation.Host;
using System.Globalization;
using System.Reflection;
using System.Runtime.InteropServices;
namespace Microsoft.PowerShell
{
// this is all originally from https://msdn.microsoft.com/en-us/library/ee706570%28v=vs.85%29.aspx
internal sealed class ConsoleHostRawUserInterface : PSHostRawUserInterface
{
private ConsoleColor defaultForeground = ConsoleColor.Gray;
private ConsoleColor defaultBackground = ConsoleColor.Black;
private ConsoleHostUserInterface parent = null;
internal ConsoleHostRawUserInterface(ConsoleHostUserInterface mshConsole) : base()
{
defaultForeground = ForegroundColor;
defaultBackground = BackgroundColor;
parent = mshConsole;
}
/// <summary>
/// Gets or sets the background color of the displayed text.
/// This maps to the corresponding Console.Background property.
/// </summary>
public override ConsoleColor BackgroundColor
{
get
{
// Console can return UnknownColor, a private enum, equivalent
// to -1. When this is a case, map it instead to our default.
return Console.BackgroundColor == (ConsoleColor)(-1)
? defaultBackground
: Console.BackgroundColor;
}
set { Console.BackgroundColor = value; }
}
// TODO: Make wrap width user-customizable.
private static Size WrapSize = new Size(80, 40);
/// <summary>
/// Gets or sets the size of the host buffer.
/// </summary>
public override Size BufferSize
{
get
{
// Console can return zero when a pseduo-TTY is allocated, which
// is useless for us. Instead, map to the wrap size.
return Console.BufferWidth == 0 || Console.BufferHeight == 0
? WrapSize
: new Size(Console.BufferWidth, Console.BufferHeight);
}
set { Console.SetBufferSize(value.Width, value.Height); }
}
/// <summary>
/// Gets or sets the cursor position.
/// </summary>
public override Coordinates CursorPosition
{
get { return new Coordinates(Console.CursorLeft, Console.CursorTop); }
set { Console.SetCursorPosition(value.X < 0 ? 0 : value.X,
value.Y < 0 ? 0 : value.Y); }
}
/// <summary>
/// Gets or sets the size of the displayed cursor.
/// This maps to the corresponding Console.CursorSize property.
/// </summary>
public override int CursorSize
{
// Future porting note: this API throws on Windows when output is
// redirected, but never throws on Unix because it's fake.
get { return Console.CursorSize; }
set { Console.CursorSize = value; }
}
/// <summary>
/// Gets or sets the foreground color of the displayed text.
/// This maps to the corresponding Console.ForegroundColor property.
/// </summary>
public override ConsoleColor ForegroundColor
{
get
{
// Console can return UnknownColor, a private enum, equivalent
// to -1. When this is a case, map it instead to our default.
return Console.ForegroundColor == (ConsoleColor)(-1)
? defaultForeground
: Console.ForegroundColor;
}
set { Console.ForegroundColor = value; }
}
/// <summary>
/// Gets a value indicating whether the user has pressed a key. This maps
/// to the corresponding Console.KeyAvailable property.
/// </summary>
public override bool KeyAvailable
{
get { return Console.KeyAvailable; }
}
/// <summary>
/// Gets the dimensions of the largest window that could be rendered in
/// the current display, if the buffer was at the least that large.
/// This maps to the MaxWindowSize.
/// </summary>
public override Size MaxPhysicalWindowSize
{
get { return MaxWindowSize; }
}
/// <summary>
/// Gets the dimensions of the largest window size that can be
/// displayed. This maps to the Console.LargestWindowWidth and
/// Console.LargestWindowHeight properties to determine the returned
/// value of this property.
/// </summary>
public override Size MaxWindowSize
{
get
{
// Console can return zero when a pseduo-TTY is allocated, which
// is useless for us. Instead, map to the wrap size.
return Console.LargestWindowWidth == 0 || Console.LargestWindowHeight == 0
? WrapSize
: new Size(Console.LargestWindowWidth, Console.LargestWindowHeight);
}
}
/// <summary>
/// Gets or sets the position of the displayed window. This maps to the
/// Console window position APIs to determine the returned value of this
/// property.
/// </summary>
public override Coordinates WindowPosition
{
get { return new Coordinates(Console.WindowLeft, Console.WindowTop); }
set { Console.SetWindowPosition(value.X, value.Y); }
}
/// <summary>
/// Gets or sets the size of the displayed window. This example
/// uses the corresponding Console window size APIs to determine the
/// returned value of this property.
/// </summary>
public override Size WindowSize
{
get
{
// Console can return zero when a pseduo-TTY is allocated, which
// is useless for us. Instead, map to the wrap size.
return Console.WindowWidth == 0 || Console.WindowHeight == 0
? WrapSize
: new Size(Console.WindowWidth, Console.WindowHeight);
}
set { Console.SetWindowSize(value.Width, value.Height); }
}
/// <summary>
/// Cached Window Title, for systems that needs it
/// </summary>
private string title = String.Empty;
/// <summary>
/// Gets or sets the title of the displayed window. The example
/// maps the Console.Title property to the value of this property.
/// </summary>
public override string WindowTitle
{
get
{
// Console throws an exception on Unix platforms, so we handle
// caching and returning the Window title ourselves.
return Platform.IsWindows ? Console.Title : title;
}
set
{
Console.Title = value;
title = value;
}
}
/// <summary>
/// This API resets the input buffer.
/// </summary>
public override void FlushInputBuffer()
{
if (!Console.IsInputRedirected)
{
Console.OpenStandardInput().Flush();
}
}
public void ScrollBuffer(int lines)
{
for (int i=0; i<lines; ++i)
{
Console.Out.Write('\n');
}
}
internal struct COORD
{
internal short X;
internal short Y;
public override string ToString()
{
return string.Format(CultureInfo.InvariantCulture, "{0},{1}", X, Y);
}
}
internal struct SMALL_RECT
{
internal short Left;
internal short Top;
internal short Right;
internal short Bottom;
public override string ToString()
{
return String.Format(CultureInfo.InvariantCulture, "{0},{1},{2},{3}", Left, Top, Right, Bottom);
}
}
/// <summary>
/// This API returns a rectangular region of the screen buffer. In
/// this example this functionality is not needed so the method throws
/// a NotImplementException exception.
/// </summary>
/// <param name="rectangle">Defines the size of the rectangle.</param>
/// <returns>Throws a NotImplementedException exception.</returns>
public override BufferCell[,] GetBufferContents(Rectangle rectangle)
{
throw new NotImplementedException("The method or operation is not implemented.");
}
/// <summary>
/// This API reads a pressed, released, or pressed and released keystroke
/// from the keyboard device, blocking processing until a keystroke is
/// typed that matches the specified keystroke options.
/// </summary>
/// <param name="options">Unused</param>
public override KeyInfo ReadKey(ReadKeyOptions options)
{
ConsoleKeyInfo key = Console.ReadKey();
return new KeyInfo((int)key.Key, key.KeyChar, new ControlKeyStates(), true);
}
/// <summary>
/// This API crops a region of the screen buffer. In this example
/// this functionality is not needed so the method throws a
/// NotImplementException exception.
/// </summary>
/// <param name="source">The region of the screen to be scrolled.</param>
/// <param name="destination">The region of the screen to receive the
/// source region contents.</param>
/// <param name="clip">The region of the screen to include in the operation.</param>
/// <param name="fill">The character and attributes to be used to fill all cell.</param>
public override void ScrollBufferContents(Rectangle source, Coordinates destination, Rectangle clip, BufferCell fill)
{
throw new NotImplementedException("The method or operation is not implemented.");
}
/// <summary>
/// This method copies an array of buffer cells into the screen buffer
/// at a specified location.
/// </summary>
/// <param name="origin">The parameter used to set the origin where the buffer where begin writing to.</param>
/// <param name="contents">The parameter used to contain the contents to be written to the buffer.</param>
public override void SetBufferContents(Coordinates origin,
BufferCell[,] contents)
{
//if there are no contents, there is nothing to set the buffer to
if (contents == null)
{
PSTraceSource.NewArgumentNullException("contents");
}
//if the cursor is on the last line, we need to make more space to print the specified buffer
if (origin.Y == BufferSize.Height - 1 && origin.X >= BufferSize.Width)
{
//for each row in the buffer, create a new line
int rows = contents.GetLength(0);
ScrollBuffer(rows);
// for each row in the buffer, move the cursor y up to the beginning of the created blank space
// but not above zero
if (origin.Y >= rows)
{
origin.Y -= rows;
}
}
//iterate through the buffer to set
foreach (var charitem in contents)
{
//set the cursor to false to prevent cursor flicker
Console.CursorVisible = false;
//if x is exceeding buffer width, reset to the next line
if (origin.X >= BufferSize.Width)
{
origin.X = 1;
}
//write the character from contents
Console.Out.Write(charitem.Character);
//advance the character one position
origin.X++;
}
//reset the cursor to the original position
CursorPosition = origin;
//reset the cursor to visible
Console.CursorVisible = true;
}
/// <summary>
/// This method copies a given character, foreground color, and background
/// color to a region of the screen buffer. In this example this
/// functionality is not needed so the method throws a
/// NotImplementException exception./// </summary>
/// <param name="rectangle">Defines the area to be filled. </param>
/// <param name="fill">Defines the fill character.</param>
public override void SetBufferContents(Rectangle rectangle, BufferCell fill)
{
throw new NotImplementedException("The method or operation is not implemented.");
}
}
}
#endif

View File

@ -14,9 +14,7 @@ using System.Management.Automation.Internal;
using System.Management.Automation.Host;
using System.Security;
using Dbg = System.Management.Automation.Diagnostics;
#if !UNIX
using ConsoleHandle = Microsoft.Win32.SafeHandles.SafeFileHandle;
#endif
namespace Microsoft.PowerShell
{
@ -61,15 +59,13 @@ namespace Microsoft.PowerShell
this.parent = parent;
this.rawui = new ConsoleHostRawUserInterface(this);
#if UNIX
this._supportsVirtualTerminal = true;
#else
try
{
// Turn on virtual terminal if possible.
// This might throw - not sure how exactly (no console), but if it does, we shouldn't fail to start.
var handle = ConsoleControl.GetActiveScreenBufferHandle();
var m = ConsoleControl.GetMode(handle);
if (ConsoleControl.NativeMethods.SetConsoleMode(handle.DangerousGetHandle(), (uint) (m | ConsoleControl.ConsoleModes.VirtualTerminal)))
{
@ -82,7 +78,6 @@ namespace Microsoft.PowerShell
catch
{
}
#endif
isInteractiveTestToolListening = false;
}
@ -238,7 +233,7 @@ namespace Microsoft.PowerShell
result = ReadLineSafe(true, printToken);
}
SecureString secureResult = result as SecureString;
System.Management.Automation.Diagnostics.Assert(secureResult != null, "ReadLineSafe did not return a SecureString");
Diagnostics.Assert(secureResult != null, "ReadLineSafe did not return a SecureString");
return secureResult;
}
@ -251,10 +246,6 @@ namespace Microsoft.PowerShell
/// It also manages the cursor as keys are entered and "backspaced". However, it is possible that
/// while this method is running, the console buffer contents could change. Then, its cursor mgmt
/// will likely be messed up.
///
/// Secondary implementation for Unix based on Console.ReadKey(), where
/// the advantage is portability through abstraction. Does not support
/// arrow key movement, but supports backspace.
///
/// </summary>
///<param name="isSecureString">
@ -297,21 +288,13 @@ namespace Microsoft.PowerShell
null;
SecureString secureResult = new SecureString();
StringBuilder result = new StringBuilder();
#if UNIX
bool treatControlCAsInput = Console.TreatControlCAsInput;
#else
ConsoleHandle handle = ConsoleControl.GetConioDeviceHandle();
ConsoleControl.ConsoleModes originalMode = ConsoleControl.GetMode(handle);
bool isModeChanged = true; // assume ConsoleMode is changed so that if ReadLineSetMode
// fails to return the value correctly, the original mode is
// restored.
#endif
try
{
#if UNIX
Console.TreatControlCAsInput = true;
#else
// Ensure that we're in the proper line-input mode.
ConsoleControl.ConsoleModes desiredMode =
@ -338,7 +321,6 @@ namespace Microsoft.PowerShell
isModeChanged = false;
}
rawui.ClearKeyCache();
#endif
Coordinates originalCursorPos = rawui.CursorPosition;
@ -349,39 +331,22 @@ namespace Microsoft.PowerShell
// end up having a immutable string holding the
// secret in memory.
//
#if UNIX
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
#else
uint unused = 0;
string key = ConsoleControl.ReadConsole(handle, string.Empty, 1, false, out unused);
#endif
#if UNIX
// Handle Ctrl-C ending input
if (keyInfo.Key == ConsoleKey.C && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control))
#else
if (string.IsNullOrEmpty(key) || (char)3 == key[0])
#endif
{
PipelineStoppedException e = new PipelineStoppedException();
throw e;
}
#if UNIX
if (keyInfo.Key == ConsoleKey.Enter)
#else
if ((char)13 == key[0])
#endif
{
//
// we are done if user presses ENTER key
//
break;
}
#if UNIX
if (keyInfo.Key == ConsoleKey.Backspace)
#else
if ((char)8 == key[0])
#endif
{
//
// for backspace, remove last char appended
@ -397,13 +362,6 @@ namespace Microsoft.PowerShell
WriteBackSpace(originalCursorPos);
}
}
#if UNIX
else if (Char.IsControl(keyInfo.KeyChar))
{
// blacklist control characters
continue;
}
#endif
else
{
//
@ -411,19 +369,11 @@ namespace Microsoft.PowerShell
//
if (isSecureString)
{
#if UNIX
secureResult.AppendChar(keyInfo.KeyChar);
#else
secureResult.AppendChar(key[0]);
#endif
}
else
{
#if UNIX
result.Append(keyInfo.KeyChar);
#else
result.Append(key);
#endif
}
if (!string.IsNullOrEmpty(printTokenString))
{
@ -433,23 +383,12 @@ namespace Microsoft.PowerShell
}
while (true);
}
#if UNIX
catch (InvalidOperationException)
{
// ReadKey() failed so we stop
throw new PipelineStoppedException();
}
#endif
finally
{
#if UNIX
Console.TreatControlCAsInput = treatControlCAsInput;
#else
if (isModeChanged)
{
ConsoleControl.SetMode(handle, originalMode);
}
#endif
}
WriteLineToConsole();
PostRead(result.ToString());
@ -463,7 +402,6 @@ namespace Microsoft.PowerShell
}
}
/// <summary>
///
/// Handle writing print token with proper cursor adjustment for ReadLineSafe
@ -573,7 +511,7 @@ namespace Microsoft.PowerShell
}
#if !UNIX
/// <summary>
///
/// If <paramref name="m"/> is set on <paramref name="flagToUnset"/>, unset it and return true;
@ -593,6 +531,7 @@ namespace Microsoft.PowerShell
/// false otherwise
///
/// </returns>
private static bool shouldUnsetMode(
ConsoleControl.ConsoleModes flagToUnset,
ref ConsoleControl.ConsoleModes m)
@ -604,14 +543,11 @@ namespace Microsoft.PowerShell
}
return false;
}
#endif
#region WriteToConsole
internal void WriteToConsole(string value, bool transcribeResult)
{
#if !UNIX
ConsoleHandle handle = ConsoleControl.GetActiveScreenBufferHandle();
// Ensure that we're in the proper line-output mode. We don't lock here as it does not matter if we
@ -628,17 +564,12 @@ namespace Microsoft.PowerShell
m |= desiredMode;
ConsoleControl.SetMode(handle, m);
}
#endif
PreWrite();
// This is atomic, so we don't lock here...
#if !UNIX
ConsoleControl.WriteConsole(handle, value);
#else
Console.Out.Write(value);
#endif
if (isInteractiveTestToolListening && Console.IsOutputRedirected)
{
@ -1539,9 +1470,9 @@ namespace Microsoft.PowerShell
// We use System.Environment.NewLine because we are platform-agnostic
// We don't use System.Environment.NewLine because we are very platform specific with our use of the win32 console APIs
internal static string Crlf = System.Environment.NewLine;
internal const string Crlf = "\x000D\x000A";
private const string Tab = "\x0009";
internal enum ReadLineResult
@ -1688,11 +1619,10 @@ namespace Microsoft.PowerShell
private string ReadLineFromConsole(bool endOnTab, string initialContent, bool calledFromPipeline, ref string restOfLine, ref ReadLineResult result)
{
ConsoleHandle handle = ConsoleControl.GetConioDeviceHandle();
PreRead();
// Ensure that we're in the proper line-input mode.
#if !UNIX
ConsoleHandle handle = ConsoleControl.GetConioDeviceHandle();
ConsoleControl.ConsoleModes m = ConsoleControl.GetMode(handle);
const ConsoleControl.ConsoleModes desiredMode =
@ -1706,7 +1636,6 @@ namespace Microsoft.PowerShell
m |= desiredMode;
ConsoleControl.SetMode(handle, m);
}
#endif
// If more characters are typed than you asked, then the next call to ReadConsole will return the
// additional characters beyond those you requested.
@ -1723,44 +1652,18 @@ namespace Microsoft.PowerShell
// If input is terminated with a break key (Ctrl-C, Ctrl-Break, Close, etc.), then the buffer will be
// the empty string.
#if UNIX
// For Unix systems, we implement a basic readline loop around Console.ReadKey(), that
// supports backspace, arrow keys, Ctrl-C, and Ctrl-D. This readline is only used for
// interactive prompts (like Read-Host), otherwise it is assumed that PSReadLine is
// available. Therefore this explicitly does not support history or tab completion.
bool treatControlCAsInput = Console.TreatControlCAsInput;
try
{
ConsoleKeyInfo keyInfo;
string s = "";
int index = 0;
int cursorLeft = Console.CursorLeft;
int cursorCurrent = cursorLeft;
bool insertMode = true;
Console.TreatControlCAsInput = true;
#else
rawui.ClearKeyCache();
uint keyState = 0;
rawui.ClearKeyCache();
string s = "";
#endif
do
{
#if UNIX
keyInfo = Console.ReadKey(true);
#else
s += ConsoleControl.ReadConsole(handle, initialContent, maxInputLineLength, endOnTab, out keyState);
Dbg.Assert(s != null, "s should never be null");
#endif
#if UNIX
// Handle Ctrl-C ending input
if (keyInfo.Key == ConsoleKey.C && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control))
#else
Dbg.Assert(s != null, "s should never be null");
if (s.Length == 0)
#endif
{
result = ReadLineResult.endedOnBreak;
s = null;
@ -1774,29 +1677,13 @@ namespace Microsoft.PowerShell
break;
}
#if UNIX
if (keyInfo.Key == ConsoleKey.Enter)
#else
if (s.EndsWith(Crlf, StringComparison.CurrentCulture))
#endif
{
result = ReadLineResult.endedOnEnter;
#if UNIX
// We're intercepting characters, so we need to echo the newline
Console.Out.WriteLine();
#else
s = s.Remove(s.Length - Crlf.Length);
#endif
break;
}
#if UNIX
if (keyInfo.Key == ConsoleKey.Tab)
{
// This is unsupported
continue;
}
#else
int i = s.IndexOf(Tab, StringComparison.CurrentCulture);
if (endOnTab && i != -1)
@ -1846,139 +1733,17 @@ namespace Microsoft.PowerShell
break;
}
#endif
#if UNIX
if (keyInfo.Key == ConsoleKey.Backspace)
{
if (index > 0)
{
int length = s.Length;
s = s.Remove(index - 1, 1);
index--;
cursorCurrent = Console.CursorLeft;
Console.CursorLeft = cursorLeft;
Console.Out.Write(s.PadRight(length));
Console.CursorLeft = cursorCurrent - 1;
}
continue;
}
if (keyInfo.Key == ConsoleKey.Delete
|| (keyInfo.Key == ConsoleKey.D && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control)))
{
if (index < s.Length)
{
int length = s.Length;
s = s.Remove(index, 1);
cursorCurrent = Console.CursorLeft;
Console.CursorLeft = cursorLeft;
Console.Out.Write(s.PadRight(length));
Console.CursorLeft = cursorCurrent;
}
continue;
}
if (keyInfo.Key == ConsoleKey.LeftArrow
|| (keyInfo.Key == ConsoleKey.B && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control)))
{
if (Console.CursorLeft > cursorLeft)
{
Console.CursorLeft--;
index--;
}
continue;
}
if (keyInfo.Key == ConsoleKey.RightArrow
|| (keyInfo.Key == ConsoleKey.F && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control)))
{
if (Console.CursorLeft < cursorLeft + s.Length)
{
Console.CursorLeft++;
index++;
}
continue;
}
if (keyInfo.Key == ConsoleKey.UpArrow
|| keyInfo.Key == ConsoleKey.DownArrow
|| keyInfo.Key == ConsoleKey.PageUp
|| keyInfo.Key == ConsoleKey.PageDown)
{
// Arrow/Page Up/down is unimplemented, so fail gracefully
continue;
}
if (keyInfo.Key == ConsoleKey.Home
|| (keyInfo.Key == ConsoleKey.A && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control)))
{
Console.CursorLeft = cursorLeft;
index = 0;
continue;
}
if (keyInfo.Key == ConsoleKey.End
|| (keyInfo.Key == ConsoleKey.E && keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control)))
{
Console.CursorLeft = cursorLeft + s.Length;
index = s.Length;
continue;
}
if (keyInfo.Key == ConsoleKey.Escape)
{
Console.CursorLeft = cursorLeft;
index = s.Length;
s = "";
continue;
}
if (keyInfo.Key == ConsoleKey.Insert)
{
// Toggle insert/overwrite mode
insertMode = !insertMode;
continue;
}
if (Char.IsControl(keyInfo.KeyChar))
{
// blacklist control characters
continue;
}
// Modify string
if (!insertMode) // then overwrite mode
{
s = s.Remove(index, 1);
}
s = s.Insert(index, keyInfo.KeyChar.ToString());
index++;
// Redisplay string
cursorCurrent = Console.CursorLeft;
Console.CursorLeft = cursorLeft;
Console.Out.Write(s);
Console.CursorLeft = cursorCurrent + 1;
#endif
}
while (true);
Dbg.Assert(
(s == null && result == ReadLineResult.endedOnBreak)
|| (s != null && result != ReadLineResult.endedOnBreak),
"s should only be null if input ended with a break");
(s == null && result == ReadLineResult.endedOnBreak)
|| (s != null && result != ReadLineResult.endedOnBreak),
"s should only be null if input ended with a break");
return s;
#if UNIX
}
finally
{
Console.TreatControlCAsInput = treatControlCAsInput;
}
#endif
}
#if !UNIX
/// <summary>
/// Get the character at the cursor when the user types 'tab' in the middle of line.
/// </summary>
@ -2006,7 +1771,6 @@ namespace Microsoft.PowerShell
Dbg.Assert(false, "the character at the cursor should be retrieved, never gets to here");
return '\0';
}
#endif
/// <summary>
@ -2047,15 +1811,13 @@ namespace Microsoft.PowerShell
/// </returns>
internal string ReadLineWithTabCompletion(Executor exec)
{
string input = null;
string lastInput = "";
ReadLineResult rlResult = ReadLineResult.endedOnEnter;
#if !UNIX
ConsoleHandle handle = ConsoleControl.GetActiveScreenBufferHandle();
string input = null;
string lastInput = "";
string lastCompletion = "";
ReadLineResult rlResult = ReadLineResult.endedOnEnter;
Size screenBufferSize = RawUI.BufferSize;
// Save the cursor position at the end of the prompt string so that we can restore it later to write the
@ -2065,7 +1827,6 @@ namespace Microsoft.PowerShell
CommandCompletion commandCompletion = null;
string completionInput = null;
#endif
do
{
@ -2076,6 +1837,9 @@ namespace Microsoft.PowerShell
input = ReadLine(true, lastInput, out rlResult, false, false);
Coordinates endOfInputCursorPos = RawUI.CursorPosition;
string completedInput = null;
if (input == null)
{
break;
@ -2086,13 +1850,6 @@ namespace Microsoft.PowerShell
break;
}
#if UNIX // Portable code only ends on enter (or no input), so tab is not processed
throw new PlatformNotSupportedException("This readline state is unsupported in portable code!");
#else
Coordinates endOfInputCursorPos = RawUI.CursorPosition;
string completedInput = null;
if (rlResult == ReadLineResult.endedOnTab || rlResult == ReadLineResult.endedOnShiftTab)
{
int tabIndex = input.IndexOf(Tab, StringComparison.CurrentCulture);
@ -2196,7 +1953,6 @@ namespace Microsoft.PowerShell
lastInput = completedInput;
}
#endif
}
while (true);
@ -2212,7 +1968,6 @@ namespace Microsoft.PowerShell
return input;
}
#if !UNIX
private void SendLeftArrows(int length)
{
var inputs = new ConsoleControl.INPUT[length * 2];
@ -2242,7 +1997,6 @@ namespace Microsoft.PowerShell
ConsoleControl.MimicKeyPress(inputs);
}
#endif
private CommandCompletion GetNewCompletionResults(string input)
{

View File

@ -400,7 +400,7 @@ namespace Microsoft.PowerShell
{
object userInput = ReadLineSafe(false, null);
string userInputString = userInput as string;
System.Management.Automation.Diagnostics.Assert(userInputString != null, "ReadLineSafe did not return a string");
Diagnostics.Assert(userInputString != null, "ReadLineSafe did not return a string");
rawInputString = userInputString;
}
if (rawInputString == null)

View File

@ -315,7 +315,7 @@ namespace Microsoft.PowerShell
Dictionary<int, bool> defaultChoiceKeys,
bool shouldEmulateForMultipleChoiceSelection)
{
System.Management.Automation.Diagnostics.Assert(defaultChoiceKeys != null, "defaultChoiceKeys cannot be null.");
Diagnostics.Assert(defaultChoiceKeys != null, "defaultChoiceKeys cannot be null.");
ConsoleColor fg = RawUI.ForegroundColor;
ConsoleColor bg = RawUI.BackgroundColor;

View File

@ -102,30 +102,14 @@ namespace Microsoft.PowerShell
location.X = 0;
location.Y = Math.Min(location.Y + 2, bufSize.Height);
#if UNIX
// replace the saved region in the screen buffer with our progress display
location = rawui.CursorPosition;
//set the cursor position back to the beginning of the region to overwrite write-progress
//if the cursor is at the bottom, back it up to overwrite the previous write progress
if (location.Y >= rawui.BufferSize.Height - rows)
{
Console.Out.Write('\n');
if (location.Y >= rows)
{
location.Y -= rows;
}
}
rawui.CursorPosition = location;
#else
// Save off the current contents of the screen buffer in the region that we will occupy
savedRegion =
rawui.GetBufferContents(
new Rectangle(location.X, location.Y, location.X + cols - 1, location.Y + rows - 1));
#endif
// replace the saved region in the screen buffer with our progress display
rawui.SetBufferContents(location, tempProgressRegion);
}
}

View File

@ -30,30 +30,21 @@ namespace System.Management.Automation
// 2. Load assembly with culture 'en' (Microsoft.PowerShell.CoreCLR.AssemblyLoadContext.resources, Version=3.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35)
// When the first attempt fails, we again need to retrieve the resouce string to construct another exception, which ends up with an infinite loop.
private const string BaseFolderDoesNotExist = "The base directory '{0}' does not exist.";
private const string CannotFindFileBasedOnAssemblyName = "Could not load file or assembly '{0}' or one of its dependencies. The system cannot find the file specified under any probing paths.";
private const string ManifestDefinitionDoesNotMatch = "Could not load file or assembly '{0}' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.";
private const string AssemblyPathDoesNotExist = "Could not load file or assembly '{0}' or one of its dependencies. The system cannot find the file specified.";
private const string InvalidAssemblyExtensionName = "Could not load file or assembly '{0}' or one of its dependencies. The file specified is not a DLL file.";
private const string AbsolutePathRequired = "Absolute path information is required.";
private const string SingletonAlreadyInitialized = "The singleton of PowerShellAssemblyLoadContext has already been initialized.";
private const string UseResolvingEventHandlerOnly = "PowerShellAssemblyLoadContext was initialized to use its 'Resolving' event handler only.";
#endregion Resource_Strings
#region Constructor
/// <summary>
/// Initialize a singleton of PowerShellAssemblyLoadContext
/// This constructor is for testability purpose only
/// </summary>
internal static PowerShellAssemblyLoadContext InitializeSingleton(string basePaths, bool useResolvingHandlerOnly)
protected PowerShellAssemblyLoadContext()
{
lock (syncObj)
{
if (Instance != null)
throw new InvalidOperationException(SingletonAlreadyInitialized);
Instance = new PowerShellAssemblyLoadContext(basePaths, useResolvingHandlerOnly);
return Instance;
}
}
/// <summary>
@ -63,25 +54,7 @@ namespace System.Management.Automation
/// Base directory paths that are separated by semicolon ';'.
/// They will be the default paths to probe assemblies.
/// </param>
/// <param name="useResolvingHandlerOnly">
/// Indicate whether this instance is going to be used as a
/// full fledged ALC, or only its 'Resolve' handler is going
/// to be used.
/// </param>
/// <remarks>
/// When <paramref name="useResolvingHandlerOnly"/> is true, we will register to the 'Resolving' event of the default
/// load context with our 'Resolve' method, and depend on the default load context to resolve/load assemblies for PS.
/// This mode is used when TPA list of the native host only contains .NET Core libraries.
/// In this case, TPA binder will be consulted before hitting our resolving logic. The binding order of Assembly.Load is:
/// TPA binder --> Resolving event
///
/// When <paramref name="useResolvingHandlerOnly"/> is false, we will use this instance as a full fledged load context
/// to resolve/load assemblies for PS. This mode is used when TPA list of the native host contains both .NET Core libraries
/// and PS assemblies.
/// In this case, our Load override will kick in before consulting the TPA binder. The binding order of Assembly.Load is:
/// Load override --> TPA binder --> Resolving event
/// </remarks>
private PowerShellAssemblyLoadContext(string basePaths, bool useResolvingHandlerOnly)
internal PowerShellAssemblyLoadContext(string basePaths)
{
#region Validation
if (string.IsNullOrEmpty(basePaths))
@ -109,34 +82,17 @@ namespace System.Management.Automation
this.probingPaths = new List<string>(this.basePaths);
// NEXT: Initialize the CoreCLR type catalog dictionary [OrdinalIgnoreCase]
// - Key: namespace qualified type name (FullName)
// - Value: strong name of the TPA that contains the type represented by Key.
coreClrTypeCatalog = InitializeTypeCatalog();
// LAST: Handle useResolvingHandlerOnly flag
this.useResolvingHandlerOnly = useResolvingHandlerOnly;
this.activeLoadContext = useResolvingHandlerOnly ? Default : this;
if (useResolvingHandlerOnly)
{
Default.Resolving += Resolve;
}
else
{
var tempSet = new HashSet<string>(coreClrTypeCatalog.Values, StringComparer.OrdinalIgnoreCase);
tpaSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (string tpa in tempSet)
{
string shortName = tpa.Substring(0, tpa.IndexOf(','));
tpaSet.Add(shortName);
}
}
}
#endregion Constructor
#region Fields
private readonly bool useResolvingHandlerOnly;
private readonly AssemblyLoadContext activeLoadContext;
private readonly static object syncObj = new object();
// Serialized type catalog file
private readonly object syncObj = new object();
private readonly string[] basePaths;
// Initially, 'probingPaths' only contains psbase path. But every time we load an assembly through 'LoadFrom(string AssemblyPath)', we
// add its parent path to 'probingPaths', so that we are able to support implicit loading of an assembly from the same place where the
@ -144,11 +100,8 @@ namespace System.Management.Automation
// We don't need to worry about removing any paths from 'probingPaths', because once an assembly is loaded, it won't be unloaded until
// the current process exits, and thus the assembly itself and its parent folder cannot be deleted or renamed.
private readonly List<string> probingPaths;
// CoreCLR type catalog dictionary
// - Key: namespace qualified type name (FullName)
// - Value: strong name of the TPA that contains the type represented by Key.
// We use dictionary because the generated binary file by DataContractSerializer is about 39% smaller in size than using Hashtable.
private readonly Dictionary<string, string> coreClrTypeCatalog;
private readonly HashSet<string> tpaSet;
private readonly string[] extensions = new string[] { ".ni.dll", ".dll" };
/// <summary>
@ -170,18 +123,6 @@ namespace System.Management.Automation
#endregion Fields
#region Properties
/// <summary>
/// Singleton instance of PowerShellAssemblyLoadContext
/// </summary>
internal static PowerShellAssemblyLoadContext Instance
{
get; private set;
}
#endregion Properties
#region Events
/// <summary>
@ -198,24 +139,6 @@ namespace System.Management.Automation
/// Search the file "[assemblyName.Name][.ni].dll" in probing paths. If the file is found and it matches the requested AssemblyName, load it with LoadFromAssemblyPath.
/// </summary>
protected override Assembly Load(AssemblyName assemblyName)
{
if (useResolvingHandlerOnly)
throw new NotSupportedException(UseResolvingEventHandlerOnly);
// We let the default context load the assemblies included in the type catalog as there
// appears to be a bug in .NET with method resolution with system libraries loaded by our
// context and not the default. We use the short name because some packages have inconsistent
// verions between reference and runtime assemblies.
if (tpaSet.Contains(assemblyName.Name))
return null;
return Resolve(this, assemblyName);
}
/// <summary>
/// The handler for the Resolving event
/// </summary>
private Assembly Resolve(AssemblyLoadContext loadContext, AssemblyName assemblyName)
{
// Probe the assembly cache
Assembly asmLoaded;
@ -262,16 +185,25 @@ namespace System.Management.Automation
}
}
// We failed to find the assembly file; or we found the file, but the assembly file doesn't match the request.
// In this case, return null so that other Resolving event handlers can kick in to resolve the request.
if (!isAssemblyFileFound || !isAssemblyFileMatching)
// We failed to find the file specified
if (!isAssemblyFileFound)
{
return null;
ThrowFileNotFoundException(
CannotFindFileBasedOnAssemblyName,
assemblyName.FullName);
}
// We found the file specified, but the found assembly doesn't match the request
if (!isAssemblyFileMatching)
{
ThrowFileLoadException(
ManifestDefinitionDoesNotMatch,
assemblyName.FullName);
}
asmLoaded = asmFilePath.EndsWith(".ni.dll", StringComparison.OrdinalIgnoreCase)
? loadContext.LoadFromNativeImagePath(asmFilePath, null)
: loadContext.LoadFromAssemblyPath(asmFilePath);
? base.LoadFromNativeImagePath(asmFilePath, null)
: base.LoadFromAssemblyPath(asmFilePath);
if (asmLoaded != null)
{
// Add the loaded assembly to the cache
@ -307,8 +239,8 @@ namespace System.Management.Automation
// Load the assembly through 'LoadFromNativeImagePath' or 'LoadFromAssemblyPath'
asmLoaded = assemblyPath.EndsWith(".ni.dll", StringComparison.OrdinalIgnoreCase)
? activeLoadContext.LoadFromNativeImagePath(assemblyPath, null)
: activeLoadContext.LoadFromAssemblyPath(assemblyPath);
? base.LoadFromNativeImagePath(assemblyPath, null)
: base.LoadFromAssemblyPath(assemblyPath);
if (asmLoaded != null)
{
@ -350,8 +282,8 @@ namespace System.Management.Automation
if (TryGetAssemblyFromCache(assemblyName, out asmLoaded))
return asmLoaded;
// Load the assembly through 'LoadFromStream'
asmLoaded = activeLoadContext.LoadFromStream(assembly);
// Load the assembly through 'base.LoadFromStream'
asmLoaded = base.LoadFromStream(assembly);
if (asmLoaded != null)
{
// Add the loaded assembly to the cache
@ -376,19 +308,7 @@ namespace System.Management.Automation
string tpaStrongName;
if (coreClrTypeCatalog.TryGetValue(namespaceQualifiedTypeName, out tpaStrongName))
{
try
{
return new Assembly[] { GetTrustedPlatformAssembly(tpaStrongName) };
}
catch (FileNotFoundException)
{
// It's possible that the type catalog generated in OPS contains more entries than
// the one generated in windows build. This is because in OPS we have more freedom
// to control what packages to depend on, such as Json.NET.
// If we deploy the PSALC.dll generated from OPS to NanoServer, then it's possible
// that 'GetTrustedPlatformAssembly(tpaStrongName)' may fail for such entries. In
// this case, we ignore the exception and return our cached assemblies.
}
return new Assembly[] { GetTrustedPlatformAssembly(tpaStrongName) };
}
}
@ -468,46 +388,10 @@ namespace System.Management.Automation
return coreClrTypeCatalog.Keys;
}
/// <summary>
/// Set the profile optimization root on the appropriate load context
/// </summary>
/// <remarks>
/// When using PS ALC as a full fledged ALC in OPS, we don't enable profile optimization.
/// This is because PS assemblies will be recorded in the profile, and the next time OPS
/// starts up, the default context will load the PS assemblies pretty early to ngen them
/// in another CPU core, so our Load override won't track the loading of them, and thus
/// OPS will fail to work.
/// The root cause is that dotnet.exe put all PS assemblies in TPA list. If PS assemblies
/// are not in TPA list, then we can enable profile optimization without a problem.
/// </remarks>
internal void SetProfileOptimizationRootImpl(string directoryPath)
{
if (this.useResolvingHandlerOnly)
activeLoadContext.SetProfileOptimizationRoot(directoryPath);
}
/// <summary>
/// Start the profile optimization on the appropriate load context
/// </summary>
/// <remarks>
/// When using PS ALC as a full fledged ALC in OPS, we don't enable profile optimization.
/// This is because PS assemblies will be recorded in the profile, and the next time OPS
/// starts up, the default context will load the PS assemblies pretty early to ngen them
/// in another CPU core, so our Load override won't track the loading of them, and thus
/// OPS will fail to work.
/// The root cause is that dotnet.exe put all PS assemblies in TPA list. If PS assemblies
/// are not in TPA list, then we can enable profile optimization without a problem.
/// </remarks>
internal void StartProfileOptimizationImpl(string profile)
{
if (this.useResolvingHandlerOnly)
activeLoadContext.StartProfileOptimization(profile);
}
#endregion Protected_Internal_Methods
#region Private_Methods
/// <summary>
/// Handle the AssemblyLoad event
/// </summary>
@ -650,12 +534,9 @@ namespace System.Management.Automation
/// </param>
private Assembly GetTrustedPlatformAssembly(string tpaStrongName)
{
// We always depend on the default context to load the TPAs that are recorded in
// the type catalog.
// - If the requested TPA is already loaded, then 'Assembly.Load' will just get
// it back from the cache of default context.
// - If the requested TPA is not loaded yet, then 'Assembly.Load' will make the
// default context to load it
// Load the specified TPA. If the TPA is already loaded, it will be somehow
// cached in CoreCLR runtime, and thus calling 'Assembly.Load' again won't
// cause any overhead.
AssemblyName assemblyName = new AssemblyName(tpaStrongName);
Assembly asmLoaded = Assembly.Load(assemblyName);
return asmLoaded;
@ -683,129 +564,29 @@ namespace System.Management.Automation
}
/// <summary>
/// Set an instance of PowerShellAssemblyLoadContext to be the default Assembly Load Context.
/// This is the managed entry point for Microsoft.PowerShell.CoreCLR.AssemblyLoadContext.dll.
/// </summary>
public class PowerShellAssemblyLoadContextInitializer
{
private static object[] EmptyArray = new object[0];
private static bool IsInitialized = false;
/// <summary>
/// Create a singleton of PowerShellAssemblyLoadContext.
/// Then register to the Resolving event of the load context that loads this assembly.
/// Set the default Assembly Load Context
/// </summary>
/// <remarks>
/// This method is to be used by native host whose TPA list doesn't include PS assemblies, such as the
/// in-box Nano powershell.exe, the PS remote WinRM plugin, in-box Nano DSC and in-box Nano SCOM agent.
/// </remarks>
/// <param name="basePaths">
/// Base directory paths that are separated by semicolon ';'.
/// They will be the default paths to probe assemblies.
/// </param>
public static void SetPowerShellAssemblyLoadContext([MarshalAs(UnmanagedType.LPWStr)]string basePaths)
{
if (string.IsNullOrEmpty(basePaths))
{
throw new ArgumentNullException("basePaths");
}
PowerShellAssemblyLoadContext.InitializeSingleton(basePaths, useResolvingHandlerOnly: true);
}
/// <summary>
/// Create a singleton of PowerShellAssemblyLoadContext.
/// Then load System.Management.Automation and call the WSManPluginManagedEntryWrapper delegate.
/// </summary>
/// <remarks>
/// This method is used by the native host of the PSRP plugin.
/// </remarks>
/// <param name="wkrPtrs">
/// Passed to delegate.
/// </param>
public static int WSManPluginWrapper(IntPtr wkrPtrs)
{
string basePaths = System.IO.Path.GetDirectoryName(typeof(PowerShellAssemblyLoadContextInitializer).GetTypeInfo().Assembly.Location);
string entryAssemblyName = "System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
string entryTypeName = "System.Management.Automation.Remoting.WSManPluginManagedEntryWrapper";
string entryMethodName = "InitPlugin";
object[] args = { wkrPtrs };
var psLoadContext = PowerShellAssemblyLoadContext.InitializeSingleton(basePaths, useResolvingHandlerOnly: false);
var entryAssembly = psLoadContext.LoadFromAssemblyName(new AssemblyName(entryAssemblyName));
var entryType = entryAssembly.GetType(entryTypeName, throwOnError: true, ignoreCase: true);
var methodInfo = entryType.GetMethod(entryMethodName, BindingFlags.Static | BindingFlags.Public | BindingFlags.IgnoreCase);
return (int)methodInfo.Invoke(null, args);
}
/// <summary>
/// Create a singleton of PowerShellAssemblyLoadContext.
/// Then load the assembly containing the actual entry point using it.
/// </summary>
/// <param name="basePaths">
/// Base directory paths that are separated by semicolon ';'.
/// They will be the default paths to probe assemblies.
/// </param>
/// <param name="entryAssemblyName">
/// Name of the assembly that contains the actual entry point.
/// </param>
/// <returns>
/// The assembly that contains the actual entry point.
/// </returns>
public static Assembly InitializeAndLoadEntryAssembly(string basePaths, AssemblyName entryAssemblyName)
{
if (string.IsNullOrEmpty(basePaths))
throw new ArgumentNullException("basePaths");
if (entryAssemblyName == null)
throw new ArgumentNullException("entryAssemblyName");
var psLoadContext = PowerShellAssemblyLoadContext.InitializeSingleton(basePaths, useResolvingHandlerOnly: false);
return psLoadContext.LoadFromAssemblyName(entryAssemblyName);
}
/// <summary>
/// Create a singleton of PowerShellAssemblyLoadContext.
/// Then call into the actual entry point based on the given assembly name, type name, method name and arguments.
/// </summary>
/// <param name="basePaths">
/// Base directory paths that are separated by semicolon ';'.
/// They will be the default paths to probe assemblies.
/// </param>
/// <param name="entryAssemblyName">
/// Name of the assembly that contains the actual entry point.
/// </param>
/// <param name="entryTypeName">
/// Name of the type that contains the actual entry point.
/// </param>
/// <param name="entryMethodName">
/// Name of the actual entry point method.
/// </param>
/// <param name="args">
/// An array of arguments passed to the entry point method.
/// </param>
/// <returns>
/// The return value of running the entry point method.
/// </returns>
public static object InitializeAndCallEntryMethod(string basePaths, AssemblyName entryAssemblyName, string entryTypeName, string entryMethodName, object[] args)
{
if (string.IsNullOrEmpty(basePaths))
throw new ArgumentNullException("basePaths");
if (entryAssemblyName == null)
throw new ArgumentNullException("entryAssemblyName");
if (string.IsNullOrEmpty(entryTypeName))
throw new ArgumentNullException("entryTypeName");
if (string.IsNullOrEmpty(entryMethodName))
throw new ArgumentNullException("entryMethodName");
args = args ?? EmptyArray;
var psLoadContext = PowerShellAssemblyLoadContext.InitializeSingleton(basePaths, useResolvingHandlerOnly: false);
var entryAssembly = psLoadContext.LoadFromAssemblyName(entryAssemblyName);
var entryType = entryAssembly.GetType(entryTypeName, throwOnError: true, ignoreCase: true);
var methodInfo = entryType.GetMethod(entryMethodName, BindingFlags.Static | BindingFlags.Public | BindingFlags.IgnoreCase);
return methodInfo.Invoke(null, args);
if (!IsInitialized)
{
var psAsmLoadContext = new PowerShellAssemblyLoadContext(basePaths);
AssemblyLoadContext.InitializeDefaultContext(psAsmLoadContext);
IsInitialized = true;
}
}
}
}

View File

@ -1303,7 +1303,7 @@ Function PSGetSerializedShowCommandInfo
MessageBox.Show(
String.Format(
CultureInfo.CurrentUICulture,
ShowCommandResources.EndProcessingErrorMessage,
Microsoft.Management.UI.Internal.ShowCommandResources.EndProcessingErrorMessage,
errorString),
"Show-Command",
MessageBoxButton.OK,

View File

@ -75,12 +75,12 @@ namespace Microsoft.Management.UI.Internal
/// <summary>
/// OK Button's content.
/// </summary>
private static readonly string OKButtonContent = XamlLocalizableResources.OutGridView_Button_OK;
private static readonly string OKButtonContent = Microsoft.Management.UI.Internal.XamlLocalizableResources.OutGridView_Button_OK;
/// <summary>
/// Cancel Button's content.
/// </summary>
private static readonly string CancelButtonContent = XamlLocalizableResources.OutGridView_Button_Cancel;
private static readonly string CancelButtonContent = Microsoft.Management.UI.Internal.XamlLocalizableResources.OutGridView_Button_Cancel;
/// <summary>
/// Used to store selected items in the ok processing

View File

@ -45,7 +45,7 @@
</Grid>
<ScrollViewer x:Name="Scroll" HorizontalAlignment="Stretch" Grid.Row="1" AutomationProperties.Name="{Binding HelpTitle}">
<RichTextBox x:Name="HelpText" FontFamily="Consolas" VerticalScrollBarVisibility="Disabled" BorderThickness="0" IsReadOnly="True" AutomationProperties.Name="{Binding HelpTitle}">
<RichTextBox x:Name="HelpText" FontFamily="Consolas" VerticalScrollBarVisibility="Disabled" BorderThickness="0" IsReadOnly="True" IsReadOnlyCaretVisible="True" AutomationProperties.Name="{Binding HelpTitle}">
<RichTextBox.LayoutTransform>
<ScaleTransform ScaleX="{Binding Path=ZoomLevel}" ScaleY="{Binding Path=ZoomLevel}"/>
</RichTextBox.LayoutTransform>

View File

@ -160,7 +160,7 @@ namespace System.Management.Automation.SecurityAccountsManager.Extensions
#if CORECLR
IntPtr buffer = SecureStringMarshal.SecureStringToCoTaskMemUnicode(str);
string clear = Marshal.PtrToStringUni(buffer);
Marshal.ZeroFreeCoTaskMemUnicode(buffer);
SecureStringMarshal.ZeroFreeCoTaskMemUnicode(buffer);
#else
var bstr = Marshal.SecureStringToBSTR(str);
string clear = Marshal.PtrToStringAuto(bstr);
@ -200,4 +200,4 @@ namespace System.Management.Automation.SecurityAccountsManager.Extensions
return ex.MakeErrorRecord(ex.ErrorName, ex.ErrorCategory, target ?? ex.Target);
}
}
}
}

View File

@ -477,7 +477,6 @@ namespace Microsoft.PowerShell.PackageManagement.Cmdlets {
#region Event and telemetry stuff
//Calling PowerShell Telemetry APIs
protected void TraceMessage(string message, SoftwareIdentity swidObject) {
#if !UNIX
TelemetryAPI.TraceMessage(message,
new {
PackageName = swidObject.Name,
@ -487,7 +486,6 @@ namespace Microsoft.PowerShell.PackageManagement.Cmdlets {
ExuectionStatus = swidObject.Status,
ExecutionTime = DateTime.Today
});
#endif
}
protected enum EventTask {
@ -510,7 +508,6 @@ namespace Microsoft.PowerShell.PackageManagement.Cmdlets {
protected void LogEvent(EventTask task, EventId id, string context, string name, string version, string providerName, string source, string status, string destinationPath)
{
#if !UNIX
var iis = InitialSessionState.CreateDefault2();
using (Runspace rs = RunspaceFactory.CreateRunspace(iis))
@ -537,8 +534,7 @@ namespace Microsoft.PowerShell.PackageManagement.Cmdlets {
Verbose(ex.Message);
}
}
}
#endif
}
}
#endregion

View File

@ -57,12 +57,7 @@ namespace Microsoft.PowerShell.PackageManagement.Cmdlets {
return true;
}
protected override void ProcessPackage(PackageProvider provider, IEnumerable<string> searchKey, SoftwareIdentity package)
{
ProcessPackage(provider, searchKey, package, IncludeDependencies ? new HashSet<string>() : null);
}
private void ProcessPackage(PackageProvider provider, IEnumerable<string> searchKey, SoftwareIdentity package, HashSet<string> processedDependencies) {
protected override void ProcessPackage(PackageProvider provider, IEnumerable<string> searchKey, SoftwareIdentity package) {
try {
@ -76,24 +71,14 @@ namespace Microsoft.PowerShell.PackageManagement.Cmdlets {
foreach (var dep in package.Dependencies) {
// note: future work may be needed if the package sources currently selected by the user don't
// contain the dependencies.
var dependendcies = PackageManagementService.FindPackageByCanonicalId(dep, this);
var depPkg = dependendcies.OrderByDescending(pp => pp, SoftwareIdentityVersionComparer.Instance).FirstOrDefault();
// this dep is not processed yet
if (!processedDependencies.Contains(dep))
{
var dependendcies = PackageManagementService.FindPackageByCanonicalId(dep, this);
var depPkg = dependendcies.OrderByDescending(pp => pp, SoftwareIdentityVersionComparer.Instance).FirstOrDefault();
processedDependencies.Add(dep);
if (depPkg == null)
{
missingDependencies.Add(dep);
Warning(Constants.Messages.UnableToFindDependencyPackage, dep);
}
else
{
ProcessPackage(depPkg.Provider, searchKey.Select(each => each + depPkg.Name).ToArray(), depPkg, processedDependencies);
}
if (depPkg == null) {
missingDependencies.Add(dep);
Warning(Constants.Messages.UnableToFindDependencyPackage, dep);
} else {
ProcessPackage(depPkg.Provider, searchKey.Select(each => each + depPkg.Name).ToArray(), depPkg);
}
}
if (missingDependencies.Any()) {

View File

@ -1,5 +1,3 @@
#if !UNIX
/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
@ -281,6 +279,4 @@ namespace Microsoft.PowerShell.Commands
}
}
}
#endif
}

View File

@ -3956,12 +3956,7 @@ namespace Microsoft.PowerShell.Activities
{
try
{
var psvar = runspace.SessionStateProxy.PSVariable.Get(name);
if (psvar == null || (psvar.Options & ScopedItemOptions.ReadOnly) == 0)
{
// don't try to overwrite read-only variables values
runspace.SessionStateProxy.PSVariable.Set(name, value);
}
runspace.SessionStateProxy.PSVariable.Set(name, value);
}
catch (PSNotSupportedException)
{

View File

@ -1307,8 +1307,9 @@ namespace Microsoft.PowerShell.Workflow
AddParameter("Depth", 10).
AddParameter("Path", tempPath).Invoke();
throw new Exception("Bug MSFT:246456 detected. Please capture " + tempPath + ", open a new issue " +
"at https://github.com/PowerShell/PowerShell/issues/new and attach the file.");
throw new Exception("Bug MSFT:246456 detected. Please capture " + tempPath + ", attach it to " +
"https://microsoft.visualstudio.com/DefaultCollection/WSSC/_workItems#id=246456&_a=edit, and " +
"then reassign the bug to leeholm.");
}
else
{

View File

@ -87,7 +87,7 @@ namespace Microsoft.WSMan.Management
private FileStream _fs;
private StreamReader _sr;
private static ResourceManager g_resourceMgr = new ResourceManager("Microsoft.WSMan.Management.resources.WsManResources", typeof(WSManHelper).GetTypeInfo().Assembly);
private static ResourceManager g_resourceMgr = new ResourceManager("WsManResources", typeof(WSManHelper).GetTypeInfo().Assembly);
//
@ -135,16 +135,20 @@ namespace Microsoft.WSMan.Management
internal WSManHelper()
{
_resourceMgr = new ResourceManager("WsManResources", this.GetType().GetTypeInfo().Assembly);
}
internal WSManHelper(PSCmdlet cmdlet)
{
cmdletname = cmdlet;
_resourceMgr = new ResourceManager("WsManResources", this.GetType().GetTypeInfo().Assembly);
}
internal WSManHelper(NavigationCmdletProvider provider)
{
_provider = provider;
_resourceMgr = new ResourceManager("WsManResources", this.GetType().GetTypeInfo().Assembly);
}
internal static void ThrowIfNotAdministrator()
@ -160,13 +164,14 @@ namespace Microsoft.WSMan.Management
internal string GetResourceMsgFromResourcetext(string rscname)
{
return g_resourceMgr.GetString(rscname);
return _resourceMgr.GetString(rscname);
}
static internal string FormatResourceMsgFromResourcetextS(string rscname,
params object[] args)
{
return FormatResourceMsgFromResourcetextS(g_resourceMgr, rscname, args);
ResourceManager resourceManager = new ResourceManager("WsManResources", typeof(WSManHelper).GetTypeInfo().Assembly);
return FormatResourceMsgFromResourcetextS(resourceManager, rscname, args);
}
internal string FormatResourceMsgFromResourcetext(string resourceName,

View File

@ -587,7 +587,7 @@ function ConvertFrom-SddlString
Begin
{
# On CoreCLR CryptoKeyRights and ActiveDirectoryRights are not supported.
if ($PSEdition -eq "PowerShellCore" -and ($Type -eq "CryptoKeyRights" -or $Type -eq "ActiveDirectoryRights"))
if ($PSEdition -eq "Core" -and ($Type -eq "CryptoKeyRights" -or $Type -eq "ActiveDirectoryRights"))
{
$errorId = "TypeNotSupported"
$errorCategory = [System.Management.Automation.ErrorCategory]::InvalidArgument
@ -622,7 +622,7 @@ function ConvertFrom-SddlString
{
param($AccessMask, $Type)
if ($PSEdition -eq "PowerShellCore")
if ($PSEdition -eq "Core")
{
## All the types of access rights understood by .NET Core
$rightTypes = [Ordered] @{

View File

@ -14,44 +14,25 @@ Microsoft.PowerShell.Core\Set-StrictMode -Version Latest
# Check if this is nano server. [System.Runtime.Loader.AssemblyLoadContext] is only available on NanoServer
$script:isNanoServer = $null -ne ('System.Runtime.Loader.AssemblyLoadContext' -as [Type])
function IsWindows { $PSVariable = Get-Variable -Name IsWindows -ErrorAction Ignore; return (-not $PSVariable -or $PSVariable.Value) }
function IsLinux { $PSVariable = Get-Variable -Name IsLinux -ErrorAction Ignore; return ($PSVariable -and $PSVariable.Value) }
function IsOSX { $PSVariable = Get-Variable -Name IsOSX -ErrorAction Ignore; return ($PSVariable -and $PSVariable.Value) }
function IsCoreCLR { $PSVariable = Get-Variable -Name IsCoreCLR -ErrorAction Ignore; return ($PSVariable -and $PSVariable.Value) }
if(IsWindows)
try
{
$script:ProgramFilesPSPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell"
$script:MyDocumentsFolderPath = [Environment]::GetFolderPath("MyDocuments")
}
else
catch
{
$script:ProgramFilesPSPath = $PSHome
$script:MyDocumentsFolderPath = $null
}
if(IsWindows)
{
try
{
$script:MyDocumentsFolderPath = [Environment]::GetFolderPath("MyDocuments")
}
catch
{
$script:MyDocumentsFolderPath = $null
}
$script:ProgramFilesPSPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell"
$script:MyDocumentsPSPath = if($script:MyDocumentsFolderPath)
{
Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsFolderPath -ChildPath "WindowsPowerShell"
}
else
{
Microsoft.PowerShell.Management\Join-Path -Path $env:USERPROFILE -ChildPath "Documents\WindowsPowerShell"
}
}
else
{
$script:MyDocumentsPSPath = Microsoft.PowerShell.Management\Join-Path -Path $HOME -ChildPath ".local/share/powershell"
}
$script:MyDocumentsPSPath = if($script:MyDocumentsFolderPath)
{
Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsFolderPath -ChildPath "WindowsPowerShell"
}
else
{
Microsoft.PowerShell.Management\Join-Path -Path $env:USERPROFILE -ChildPath "Documents\WindowsPowerShell"
}
$script:ProgramFilesModulesPath = Microsoft.PowerShell.Management\Join-Path -Path $script:ProgramFilesPSPath -ChildPath "Modules"
$script:MyDocumentsModulesPath = Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsPSPath -ChildPath "Modules"
@ -60,20 +41,10 @@ $script:ProgramFilesScriptsPath = Microsoft.PowerShell.Management\Join-Path -Pat
$script:MyDocumentsScriptsPath = Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsPSPath -ChildPath "Scripts"
$script:TempPath = if(IsWindows){ ([System.IO.DirectoryInfo]$env:TEMP).FullName } else { '/tmp' }
$script:TempPath = ([System.IO.DirectoryInfo]$env:TEMP).FullName
$script:PSGetItemInfoFileName = "PSGetModuleInfo.xml"
if(IsWindows)
{
$script:PSGetProgramDataPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramData -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\'
$script:PSGetAppLocalPath = Microsoft.PowerShell.Management\Join-Path -Path $env:LOCALAPPDATA -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\'
}
else
{
$script:PSGetProgramDataPath = "$HOME/.config/powershell/powershellget" #TODO: Get $env:ProgramData equivalent
$script:PSGetAppLocalPath = "$HOME/.config/powershell/powershellget"
}
$script:PSGetProgramDataPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramData -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\'
$script:PSGetAppLocalPath = Microsoft.PowerShell.Management\Join-Path -Path $env:LOCALAPPDATA -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\'
$script:PSGetModuleSourcesFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:PSGetAppLocalPath -ChildPath "PSRepositories.xml"
$script:PSGetModuleSources = $null
$script:PSGetInstalledModules = $null
@ -118,8 +89,8 @@ $script:NuGetProviderVersion = [Version]'2.8.5.201'
$script:SupportsPSModulesFeatureName="supports-powershell-modules"
$script:FastPackRefHastable = @{}
$script:NuGetBinaryProgramDataPath=if(IsWindows) {"$env:ProgramFiles\PackageManagement\ProviderAssemblies"}
$script:NuGetBinaryLocalAppDataPath=if(IsWindows) {"$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies"}
$script:NuGetBinaryProgramDataPath="$env:ProgramFiles\PackageManagement\ProviderAssemblies"
$script:NuGetBinaryLocalAppDataPath="$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies"
# go fwlink for 'https://nuget.org/nuget.exe'
$script:NuGetClientSourceURL = 'http://go.microsoft.com/fwlink/?LinkID=690216&clcid=0x409'
$script:NuGetExeName = 'NuGet.exe'
@ -425,7 +396,10 @@ Microsoft.PowerShell.Utility\Import-LocalizedData LocalizedData -filename PSGet
# This code is required to add a .Net type and call the Telemetry APIs
# This is required since PowerShell does not support generation of .Net Anonymous types
#
$requiredAssembly = @( "system.management.automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" )
$requiredAssembly = @( "system.management.automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"$([System.Net.IWebProxy].AssemblyQualifiedName)".Substring('System.Net.IWebProxy'.Length+1).Trim(),
"$([System.Uri].AssemblyQualifiedName)".Substring('System.Uri'.Length+1).Trim()
)
$source = @"
using System;
@ -450,6 +424,47 @@ namespace Microsoft.PowerShell.Commands.PowerShellGet
}
}
/// <summary>
/// Used by Ping-Endpoint function to supply webproxy to HttpClient
/// We cannot use System.Net.WebProxy because this is not available on CoreClr
/// </summary>
public class InternalWebProxy : IWebProxy
{
Uri _proxyUri;
ICredentials _credentials;
public InternalWebProxy(Uri uri, ICredentials credentials)
{
Credentials = credentials;
_proxyUri = uri;
}
/// <summary>
/// Credentials used by WebProxy
/// </summary>
public ICredentials Credentials
{
get
{
return _credentials;
}
set
{
_credentials = value;
}
}
public Uri GetProxy(Uri destination)
{
return _proxyUri;
}
public bool IsBypassed(Uri host)
{
return false;
}
}
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
public struct CERT_CHAIN_POLICY_PARA {
@ -549,7 +564,7 @@ $script:TelemetryEnabled = $false
try
{
# If the telemetry namespace/methods are not found flow goes to the catch block where telemetry is disabled
$telemetryMethods = ([Microsoft.PowerShell.Commands.PowerShellGet.Telemetry] | Get-Member -Static).Name
$telemetryMethods = ([Microsoft.PowerShell.Get.Telemetry] | Get-Member -Static).Name
if ($telemetryMethods.Contains("TraceMessageArtifactsNotFound") -and $telemetryMethods.Contains("TraceMessageNonPSGalleryRegistration"))
{
@ -562,14 +577,14 @@ catch
# Ignore the error and try adding the type below
}
if(-not $script:TelemetryEnabled -and (IsWindows))
if(-not $script:TelemetryEnabled)
{
try
{
Add-Type -ReferencedAssemblies $requiredAssembly -TypeDefinition $source -Language CSharp -ErrorAction SilentlyContinue
# If the telemetry namespace/methods are not found flow goes to the catch block where telemetry is disabled
$telemetryMethods = ([Microsoft.PowerShell.Commands.PowerShellGet.Telemetry] | Get-Member -Static).Name
$telemetryMethods = ([Microsoft.PowerShell.Get.Telemetry] | Get-Member -Static).Name
if ($telemetryMethods.Contains("TraceMessageArtifactsNotFound") -and $telemetryMethods.Contains("TraceMessageNonPSGalleryRegistration"))
{
@ -584,66 +599,6 @@ if(-not $script:TelemetryEnabled -and (IsWindows))
}
}
$RequiredAssembliesForInternalWebProxy = @( "$([System.Net.IWebProxy].AssemblyQualifiedName)".Substring('System.Net.IWebProxy'.Length+1).Trim(),
"$([System.Uri].AssemblyQualifiedName)".Substring('System.Uri'.Length+1).Trim() )
$SourceForInternalWebProxy = @"
using System;
using System.Net;
namespace Microsoft.PowerShell.Commands.PowerShellGet
{
/// <summary>
/// Used by Ping-Endpoint function to supply webproxy to HttpClient
/// We cannot use System.Net.WebProxy because this is not available on CoreClr
/// </summary>
public class InternalWebProxy : IWebProxy
{
Uri _proxyUri;
ICredentials _credentials;
public InternalWebProxy(Uri uri, ICredentials credentials)
{
Credentials = credentials;
_proxyUri = uri;
}
/// <summary>
/// Credentials used by WebProxy
/// </summary>
public ICredentials Credentials
{
get
{
return _credentials;
}
set
{
_credentials = value;
}
}
public Uri GetProxy(Uri destination)
{
return _proxyUri;
}
public bool IsBypassed(Uri host)
{
return false;
}
}
}
"@
if(-not ('Microsoft.PowerShell.Commands.PowerShellGet.InternalWebProxy' -as [Type]))
{
Add-Type -ReferencedAssemblies $RequiredAssembliesForInternalWebProxy `
-TypeDefinition $SourceForInternalWebProxy `
-Language CSharp `
-ErrorAction SilentlyContinue
}
#endregion
#region *-Module cmdlets
@ -727,7 +682,7 @@ function Publish-Module
Begin
{
if($script:isNanoServer -or (IsCoreCLR)) {
if($script:isNanoServer) {
$message = $LocalizedData.PublishPSArtifactUnsupportedOnNano -f "Module"
ThrowError -ExceptionName "System.InvalidOperationException" `
-ExceptionMessage $message `
@ -889,7 +844,7 @@ function Publish-Module
}
else
{
$resolvedPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
$resolvedPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $resolvedPath -or
-not (Microsoft.PowerShell.Management\Test-Path -Path $resolvedPath -PathType Container))
@ -1079,7 +1034,7 @@ function Publish-Module
# Use Find-Script to check if that name is already used as scriptname
$scriptPSGetItemInfo = Find-Script @FindParameters |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $moduleName} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if($scriptPSGetItemInfo)
{
$message = $LocalizedData.SpecifiedNameIsAlearyUsed -f ($moduleName, $Repository, 'Find-Script')
@ -1094,7 +1049,7 @@ function Publish-Module
$null = $FindParameters.Remove('Tag')
$currentPSGetItemInfo = Find-Module @FindParameters |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $moduleInfo.Name} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if($currentPSGetItemInfo)
{
@ -1432,7 +1387,7 @@ function Save-Module
{
if($Path)
{
$destinationPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
$destinationPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-path $destinationPath))
{
@ -1449,7 +1404,7 @@ function Save-Module
}
else
{
$destinationPath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
$destinationPath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $destinationPath))
{
@ -1898,7 +1853,7 @@ function Update-Module
if(-not $installedPackages -and -not (Test-WildcardPattern -Name $moduleName))
{
$availableModules = Get-Module -ListAvailable $moduleName -Verbose:$false | Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore
$availableModules = Get-Module -ListAvailable $moduleName -Verbose:$false | Microsoft.PowerShell.Utility\Select-Object -Unique
if(-not $availableModules)
{
@ -2526,7 +2481,7 @@ function Publish-Script
Begin
{
if($script:isNanoServer -or (IsCoreCLR)) {
if($script:isNanoServer) {
$message = $LocalizedData.PublishPSArtifactUnsupportedOnNano -f "Script"
ThrowError -ExceptionName "System.InvalidOperationException" `
-ExceptionMessage $message `
@ -2547,7 +2502,7 @@ function Publish-Script
if($Path)
{
$scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $scriptFilePath -or
-not (Microsoft.PowerShell.Management\Test-Path -Path $scriptFilePath -PathType Leaf))
@ -2564,7 +2519,7 @@ function Publish-Script
else
{
$scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $scriptFilePath -or
-not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $scriptFilePath -PathType Leaf))
@ -2718,7 +2673,7 @@ function Publish-Script
# Use Find-Module to check if that name is already used as module name
$modulePSGetItemInfo = Find-Module @FindParameters |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $scriptName} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if($modulePSGetItemInfo)
{
$message = $LocalizedData.SpecifiedNameIsAlearyUsed -f ($scriptName, $Repository, 'Find-Module')
@ -2735,7 +2690,7 @@ function Publish-Script
$currentPSGetItemInfo = $null
$currentPSGetItemInfo = Find-Script @FindParameters |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $scriptName} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if($currentPSGetItemInfo)
{
@ -3094,7 +3049,7 @@ function Save-Script
if($Path)
{
$destinationPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-path $destinationPath))
{
@ -3112,7 +3067,7 @@ function Save-Script
else
{
$destinationPath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $destinationPath))
{
@ -4479,7 +4434,7 @@ function Test-ScriptFileInfo
$scriptFilePath = $null
if($Path)
{
$scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
$scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -Path $scriptFilePath -PathType Leaf))
{
@ -4495,7 +4450,7 @@ function Test-ScriptFileInfo
}
else
{
$scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
$scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $scriptFilePath -PathType Leaf))
{
@ -4552,7 +4507,7 @@ function Test-ScriptFileInfo
$psscriptInfoComments = $CommentTokens |
Microsoft.PowerShell.Core\Where-Object { $_.Extent.Text -match "<#PSScriptInfo" } |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $psscriptInfoComments)
{
@ -4741,20 +4696,20 @@ function Test-ScriptFileInfo
if($allCommands)
{
$allCommandNames = $allCommands | ForEach-Object {$_.Name} | Select-Object -Unique -ErrorAction Ignore
$allCommandNames = $allCommands | ForEach-Object {$_.Name} | Select-Object -Unique
ValidateAndAdd-PSScriptInfoEntry -PSScriptInfo $PSScriptInfo `
-PropertyName $script:DefinedCommands `
-PropertyValue $allCommandNames `
-CallerPSCmdlet $PSCmdlet
$allFunctionNames = $allCommands | Where-Object {-not $_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique -ErrorAction Ignore
$allFunctionNames = $allCommands | Where-Object {-not $_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique
ValidateAndAdd-PSScriptInfoEntry -PSScriptInfo $PSScriptInfo `
-PropertyName $script:DefinedFunctions `
-PropertyValue $allFunctionNames `
-CallerPSCmdlet $PSCmdlet
$allWorkflowNames = $allCommands | Where-Object {$_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique -ErrorAction Ignore
$allWorkflowNames = $allCommands | Where-Object {$_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique
ValidateAndAdd-PSScriptInfoEntry -PSScriptInfo $PSScriptInfo `
-PropertyName $script:DefinedWorkflows `
-PropertyValue $allWorkflowNames `
@ -4926,14 +4881,7 @@ function New-ScriptFileInfo
if(-not $Author)
{
if(IsWindows)
{
$Author = (Get-EnvironmentVariable -Name 'USERNAME' -Target $script:EnvironmentVariableTarget.Process -ErrorAction SilentlyContinue)
}
else
{
$Author = $env:USER
}
$Author = (Get-EnvironmentVariable -Name 'USERNAME' -Target $script:EnvironmentVariableTarget.Process -ErrorAction SilentlyContinue)
}
if(-not $Guid)
@ -4990,7 +4938,7 @@ function New-ScriptFileInfo
$ScriptMetadataString += $ScriptCommentHelpInfoString
$ScriptMetadataString += "Param()`r`n`r`n"
$tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:TempPath -ChildPath "$(Get-Random).ps1"
$tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $env:TEMP -ChildPath "$(Get-Random).ps1"
try
{
@ -5137,7 +5085,7 @@ function Update-ScriptFileInfo
if($Path)
{
$scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $scriptFilePath -or
-not (Microsoft.PowerShell.Management\Test-Path -Path $scriptFilePath -PathType Leaf))
@ -5154,7 +5102,7 @@ function Update-ScriptFileInfo
else
{
$scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $scriptFilePath -or
-not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $scriptFilePath -PathType Leaf))
@ -5214,14 +5162,7 @@ function Update-ScriptFileInfo
if(-not $Author)
{
if(IsWindows)
{
$Author = (Get-EnvironmentVariable -Name 'USERNAME' -Target $script:EnvironmentVariableTarget.Process -ErrorAction SilentlyContinue)
}
else
{
$Author = $env:USER
}
$Author = (Get-EnvironmentVariable -Name 'USERNAME' -Target $script:EnvironmentVariableTarget.Process -ErrorAction SilentlyContinue)
}
if(-not $Guid)
@ -5358,7 +5299,7 @@ function Update-ScriptFileInfo
return
}
$tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:TempPath -ChildPath "$(Get-Random).ps1"
$tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $env:TEMP -ChildPath "$(Get-Random).ps1"
try
{
@ -5414,7 +5355,7 @@ function Update-ScriptFileInfo
$psscriptInfoComments = $CommentTokens |
Microsoft.PowerShell.Core\Where-Object { $_.Extent.Text -match "<#PSScriptInfo" } |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $psscriptInfoComments)
{
@ -6041,15 +5982,10 @@ function Check-PSGalleryApiAvailability
{
$connected = Microsoft.PowerShell.Management\Test-Connection -ComputerName $microsoftDomain -Count 1 -Quiet
}
elseif(Get-Command NetTCPIP\Test-Connection -ErrorAction Ignore)
else
{
$connected = NetTCPIP\Test-NetConnection -ComputerName $microsoftDomain -InformationLevel Quiet
}
else
{
$connected = [System.Net.NetworkInformation.NetworkInterface]::GetIsNetworkAvailable()
}
if ( -not $connected)
{
return
@ -6189,7 +6125,7 @@ function Ping-Endpoint
$results = @{}
$WebProxy = $null
if($Proxy -and (IsWindows))
if($Proxy)
{
$ProxyNetworkCredential = $null
if($ProxyCredential)
@ -6197,7 +6133,7 @@ function Ping-Endpoint
$ProxyNetworkCredential = $ProxyCredential.GetNetworkCredential()
}
$WebProxy = New-Object Microsoft.PowerShell.Commands.PowerShellGet.InternalWebProxy -ArgumentList $Proxy,$ProxyNetworkCredential
$WebProxy = New-Object Microsoft.PowerShell.Get.InternalWebProxy -ArgumentList $Proxy,$ProxyNetworkCredential
}
if(HttpClientApisAvailable)
@ -6419,11 +6355,6 @@ function ValidateAndSet-PATHVariableIfUserAccepts
$Request
)
if(-not (IsWindows))
{
return
}
Set-PSGetSettingsVariable
# Check and add the scope path to PATH environment variable if USER accepts the prompt.
@ -7219,10 +7150,9 @@ function Install-NuGetClientBinaries
$Force
)
if(-not (IsWindows) -or
($script:NuGetProvider -and
(-not $BootstrapNuGetExe -or
($script:NuGetExePath -and (Microsoft.PowerShell.Management\Test-Path -Path $script:NuGetExePath)))))
if($script:NuGetProvider -and
(-not $BootstrapNuGetExe -or
($script:NuGetExePath -and (Microsoft.PowerShell.Management\Test-Path -Path $script:NuGetExePath))))
{
return
}
@ -7306,7 +7236,7 @@ function Install-NuGetClientBinaries
$_.Path -and
((Microsoft.PowerShell.Management\Split-Path -Path $_.Path -Leaf) -eq $script:NuGetExeName) -and
(-not $_.Path.StartsWith($env:windir, [System.StringComparison]::OrdinalIgnoreCase))
} | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
} | Microsoft.PowerShell.Utility\Select-Object -First 1
if($nugetCmd -and $nugetCmd.Path)
{
@ -7322,7 +7252,7 @@ function Install-NuGetClientBinaries
}
# On Nano server we don't need NuGet.exe
if(-not $bootstrapNuGetProvider -and ($script:isNanoServer -or (IsCoreCLR) -or -not $BootstrapNuGetExe))
if(-not $bootstrapNuGetProvider -and ($script:isNanoServer -or -not $BootstrapNuGetExe))
{
return
}
@ -7379,7 +7309,7 @@ function Install-NuGetClientBinaries
}
}
if($BootstrapNuGetExe -and -not $script:isNanoServer -and -not (IsCoreCLR))
if($BootstrapNuGetExe -and -not $script:isNanoServer)
{
Write-Verbose -Message $LocalizedData.DownloadingNugetExe
@ -7463,21 +7393,10 @@ function Test-RunningAsElevated
[OutputType([bool])]
Param()
if(IsWindows)
{
$wid=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$prp=new-object System.Security.Principal.WindowsPrincipal($wid)
$adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator
return $prp.IsInRole($adm)
}
elseif((IsLinux) -or (IsOSX))
{
# Permission models on *nix can be very complex, to the point that you could never possibly guess without simply trying what you need to try;
# This is totally different from Windows where you can know what you can or cannot do with/without admin rights.
return $true
}
return $false
$wid=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$prp=new-object System.Security.Principal.WindowsPrincipal($wid)
$adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator
return $prp.IsInRole($adm)
}
function Get-EscapedString
@ -7563,7 +7482,7 @@ function ValidateAndGet-ScriptDependencies
$psgetItemInfo = Find-Module @FindModuleArguments |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $ModuleName} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if(-not $psgetItemInfo)
{
@ -7606,7 +7525,7 @@ function ValidateAndGet-ScriptDependencies
$psgetItemInfo = Find-Script @FindScriptArguments |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $requiredScript} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if(-not $psgetItemInfo)
{
@ -7733,7 +7652,7 @@ function ValidateAndGet-RequiredModuleDetails
$psgetItemInfo = Find-Module @FindModuleArguments |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $ModuleName} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if(-not $psgetItemInfo)
{
@ -7777,7 +7696,7 @@ function ValidateAndGet-RequiredModuleDetails
$psgetItemInfo = Find-Module @FindModuleArguments |
Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $ModuleName} |
Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Last 1
if(-not $psgetItemInfo)
{
@ -9559,7 +9478,7 @@ function Find-Package
if($options.ContainsKey($script:Tag))
{
$userSpecifiedTags = $options[$script:Tag] | Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore
$userSpecifiedTags = $options[$script:Tag] | Microsoft.PowerShell.Utility\Select-Object -Unique
}
else
{
@ -9570,7 +9489,7 @@ function Find-Package
if($options.ContainsKey('DscResource'))
{
$specifiedDscResources = $options['DscResource'] |
Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore |
Microsoft.PowerShell.Utility\Select-Object -Unique |
Microsoft.PowerShell.Core\ForEach-Object {"$($script:DscResource)_$_"}
}
@ -9578,7 +9497,7 @@ function Find-Package
if($options.ContainsKey('RoleCapability'))
{
$specifiedRoleCapabilities = $options['RoleCapability'] |
Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore |
Microsoft.PowerShell.Utility\Select-Object -Unique |
Microsoft.PowerShell.Core\ForEach-Object {"$($script:RoleCapability)_$_"}
}
@ -9586,7 +9505,7 @@ function Find-Package
if($options.ContainsKey('Command'))
{
$specifiedCommands = $options['Command'] |
Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore |
Microsoft.PowerShell.Utility\Select-Object -Unique |
Microsoft.PowerShell.Core\ForEach-Object {"$($script:Command)_$_"}
}
@ -9594,7 +9513,7 @@ function Find-Package
if($options.ContainsKey('Includes'))
{
$includes = $options['Includes'] |
Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore |
Microsoft.PowerShell.Utility\Select-Object -Unique |
Microsoft.PowerShell.Core\ForEach-Object {"$($script:Includes)_$_"}
# Add PSIncludes_DscResource to $specifiedIncludes iff -DscResource names are not specified
@ -10509,7 +10428,7 @@ function Install-PackageUtility
}
}
$InstalledItemsList | Select-Object -Unique -ErrorAction Ignore
$InstalledItemsList | Select-Object -Unique
if($Debug)
{
@ -10595,11 +10514,11 @@ function Install-PackageUtility
$InstalledItemDetails = $null
if($packageType -eq $script:PSArtifactTypeModule)
{
$InstalledItemDetails = Get-InstalledModuleDetails -Name $pkg.Name | Select-Object -Last 1 -ErrorAction Ignore
$InstalledItemDetails = Get-InstalledModuleDetails -Name $pkg.Name | Select-Object -Last 1
}
elseif($packageType -eq $script:PSArtifactTypeScript)
{
$InstalledItemDetails = Get-InstalledScriptDetails -Name $pkg.Name | Select-Object -Last 1 -ErrorAction Ignore
$InstalledItemDetails = Get-InstalledScriptDetails -Name $pkg.Name | Select-Object -Last 1
}
if($InstalledItemDetails -and
@ -11020,11 +10939,11 @@ function Uninstall-Package
}
$dependentModulesJob = Microsoft.PowerShell.Core\Start-Job -ScriptBlock $dependentModuleScript -ArgumentList $moduleName
Microsoft.PowerShell.Core\Wait-Job -job $dependentModulesJob
$dependentModules = Microsoft.PowerShell.Core\Receive-Job -job $dependentModulesJob -ErrorAction Ignore
$dependentModules = Microsoft.PowerShell.Core\Receive-Job -job $dependentModulesJob
if(-not $Force -and $dependentModules)
{
$message = $LocalizedData.UnableToUninstallAsOtherModulesNeedThisModule -f ($moduleName, $version, $moduleBase, $(($dependentModules.Name | Select-Object -Unique -ErrorAction Ignore) -join ','), $moduleName)
$message = $LocalizedData.UnableToUninstallAsOtherModulesNeedThisModule -f ($moduleName, $version, $moduleBase, $(($dependentModules.Name | Select-Object -Unique) -join ','), $moduleName)
ThrowError -ExceptionName "System.InvalidOperationException" `
-ExceptionMessage $message `
@ -11170,7 +11089,7 @@ function Uninstall-Package
($scriptName,
$version,
$scriptBase,
$(($dependentScriptNames | Select-Object -Unique -ErrorAction Ignore) -join ','),
$(($dependentScriptNames | Select-Object -Unique) -join ','),
$scriptName)
ThrowError -ExceptionName 'System.InvalidOperationException' `
@ -11715,20 +11634,11 @@ function Set-InstalledModulesVariable
foreach ($location in $modulePaths)
{
# find all modules installed using PowerShellGet
$GetChildItemParams = @{
Path = $location
Recurse = $true
Filter = $script:PSGetItemInfoFileName
ErrorAction = 'SilentlyContinue'
WarningAction = 'SilentlyContinue'
}
if(IsWindows)
{
$GetChildItemParams['Attributes'] = 'Hidden'
}
$moduleBases = Get-ChildItem @GetChildItemParams | Foreach-Object { $_.Directory }
$moduleBases = Get-ChildItem $location -Recurse `
-Attributes Hidden -Filter $script:PSGetItemInfoFileName `
-ErrorAction SilentlyContinue `
-WarningAction SilentlyContinue `
| Foreach-Object { $_.Directory }
foreach ($moduleBase in $moduleBases)
@ -12042,7 +11952,7 @@ function Log-ArtifactNotFoundInPSGallery
# Perform Telemetry only if searched artifacts are not available in specified Gallery
if ($notFoundArtifacts)
{
[Microsoft.PowerShell.Commands.PowerShellGet.Telemetry]::TraceMessageArtifactsNotFound($notFoundArtifacts, $operationName)
[Microsoft.PowerShell.Get.Telemetry]::TraceMessageArtifactsNotFound($notFoundArtifacts, $operationName)
}
}
@ -12102,7 +12012,7 @@ function Log-NonPSGalleryRegistration
$scriptPublishLocationHash = Get-Hash -locationString $scriptPublishLocation
# Log the telemetry event
[Microsoft.PowerShell.Commands.PowerShellGet.Telemetry]::TraceMessageNonPSGalleryRegistration($sourceLocationType, $sourceLocationHash, $installationPolicy, $packageManagementProvider, $publishLocationHash, $scriptSourceLocationHash, $scriptPublishLocationHash, $operationName)
[Microsoft.PowerShell.Get.Telemetry]::TraceMessageNonPSGalleryRegistration($sourceLocationType, $sourceLocationHash, $installationPolicy, $packageManagementProvider, $publishLocationHash, $scriptSourceLocationHash, $scriptPublishLocationHash, $operationName)
}
# Returns a SHA1 hash of the specified string
@ -12256,7 +12166,7 @@ function Test-ModuleInstalled
# Check if module is already installed
$availableModule = Microsoft.PowerShell.Core\Get-Module -ListAvailable -Name $Name -Verbose:$false |
Microsoft.PowerShell.Core\Where-Object {-not (Test-ModuleSxSVersionSupport) -or -not $RequiredVersion -or ($RequiredVersion -eq $_.Version)} |
Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -Unique
return $availableModule
}
@ -12317,7 +12227,7 @@ function Test-ScriptInstalled
$scriptInfo = $scriptInfos | Microsoft.PowerShell.Core\Where-Object {
(-not $RequiredVersion) -or ($RequiredVersion -eq $_.Version)
} | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
} | Microsoft.PowerShell.Utility\Select-Object -First 1
return $scriptInfo
}
@ -12545,7 +12455,7 @@ function Update-ModuleManifest
$ProcessorArchitecture,
[Parameter()]
[ValidateSet('WindowsPowerShell','PowerShellCore')]
[ValidateSet('Desktop','Core')]
[string[]]
$CompatiblePSEditions,
@ -13910,7 +13820,7 @@ function Validate-ModuleCommandAlreadyAvailable
-WarningAction SilentlyContinue |
Microsoft.PowerShell.Core\Where-Object { ($CommandNames -contains $_.Name) -and
($_.Source -ne $CurrentModuleInfo.Name) } |
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction SilentlyContinue
if($AvailableCommand)
{
$message = $LocalizedData.ModuleCommandAlreadyAvailable -f ($AvailableCommand.Name, $CurrentModuleInfo.Name)
@ -14085,11 +13995,11 @@ function Get-InstalledModuleAuthenticodeSignature
$SourceModule = $AvailableModules | Microsoft.PowerShell.Core\Where-Object {
$_.ModuleBase.StartsWith($InstallLocation, [System.StringComparison]::OrdinalIgnoreCase)
} | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
} | Microsoft.PowerShell.Utility\Select-Object -First 1
if(-not $SourceModule)
{
$SourceModule = $AvailableModules | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore
$SourceModule = $AvailableModules | Microsoft.PowerShell.Utility\Select-Object -First 1
}
else
{
@ -14147,8 +14057,6 @@ function Test-MicrosoftCertificate
$AuthenticodeSignature
)
$result = $false
if($AuthenticodeSignature.SignerCertificate)
{
try
@ -14162,11 +14070,10 @@ function Test-MicrosoftCertificate
}
$SafeX509ChainHandle = [Microsoft.PowerShell.Commands.PowerShellGet.Win32Helpers]::CertDuplicateCertificateChain($X509Chain.ChainContext)
$result = [Microsoft.PowerShell.Commands.PowerShellGet.Win32Helpers]::IsMicrosoftCertificate($SafeX509ChainHandle)
$SafeX509ChainHandle.Close()
return [Microsoft.PowerShell.Commands.PowerShellGet.Win32Helpers]::IsMicrosoftCertificate($SafeX509ChainHandle)
}
return $result
return $false
}
function Test-ValidManifestModule
@ -14215,7 +14122,7 @@ function Test-ValidManifestModule
-CallerPSCmdlet $PSCmdlet `
-ErrorCategory InvalidOperation
}
elseif(IsWindows)
else
{
$ValidationResult = Validate-ModuleAuthenticodeSignature -CurrentModuleInfo $PSModuleInfo `
-InstallLocation $InstallLocation `

View File

@ -1,8 +1,8 @@
@{
@{
GUID="1DA87E53-152B-403E-98DC-74D7B4D63D59"
Author="Microsoft Corporation"
CompanyName="Microsoft Corporation"
Copyright="© Microsoft Corporation. All rights reserved."
Copyright="© Microsoft Corporation. All rights reserved."
ModuleVersion="3.1.0.0"
PowerShellVersion="3.0"
CmdletsToExport= "Format-List", "Format-Custom", "Format-Table", "Format-Wide",

View File

@ -10,6 +10,6 @@ AliasesToExport = @()
FunctionsToExport = @()
CmdletsToExport="Disable-WSManCredSSP", "Enable-WSManCredSSP", "Get-WSManCredSSP", "Set-WSManQuickConfig", "Test-WSMan", "Invoke-WSManAction", "Connect-WSMan", "Disconnect-WSMan", "Get-WSManInstance", "Set-WSManInstance", "Remove-WSManInstance", "New-WSManInstance", "New-WSManSessionOption"
NestedModules="Microsoft.WSMan.Management.dll"
FormatsToProcess="WSMan.format.ps1xml"
FormatsToProcess="..\..\WSMan.format.ps1xml"
HelpInfoURI = 'http://go.microsoft.com/fwlink/?linkid=390788'
}

View File

@ -10,7 +10,7 @@ AliasesToExport = @()
FunctionsToExport = @()
CmdletsToExport="Get-WinEvent", "Get-Counter", "Import-Counter", "Export-Counter", "New-WinEvent"
NestedModules="Microsoft.PowerShell.Commands.Diagnostics.dll"
TypesToProcess="GetEvent.types.ps1xml"
FormatsToProcess="Event.format.ps1xml","Diagnostics.format.ps1xml"
TypesToProcess="..\..\GetEvent.types.ps1xml"
FormatsToProcess="..\..\Event.format.ps1xml","..\..\Diagnostics.format.ps1xml"
HelpInfoURI = 'http://go.microsoft.com/fwlink/?linkid=390783'
}

Some files were not shown because too many files have changed in this diff Show More