// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System.Management.Automation; namespace Microsoft.PowerShell.Commands { /// /// A command to copy a property on an item. /// [Cmdlet(VerbsCommon.Copy, "ItemProperty", DefaultParameterSetName = "Path", SupportsShouldProcess = true, SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096589")] public class CopyItemPropertyCommand : PassThroughItemPropertyCommandBase { #region Parameters /// /// Gets or sets the path parameter to the command. /// [Parameter(Position = 0, ParameterSetName = "Path", Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] public string[] Path { get { return paths; } set { paths = value; } } /// /// Gets or sets the literal path parameter to the command. /// [Parameter(ParameterSetName = "LiteralPath", Mandatory = true, ValueFromPipeline = false, ValueFromPipelineByPropertyName = true)] [Alias("PSPath", "LP")] public string[] LiteralPath { get { return paths; } set { base.SuppressWildcardExpansion = true; paths = value; } } /// /// The name of the property to create on the item. /// [Parameter(Position = 2, Mandatory = true, ValueFromPipelineByPropertyName = true)] [Alias("PSProperty")] public string Name { get; set; } /// /// The path to the destination item to copy the property to. /// [Parameter(Mandatory = true, Position = 1, ValueFromPipelineByPropertyName = true)] public string Destination { get; set; } /// /// A virtual method for retrieving the dynamic parameters for a cmdlet. Derived cmdlets /// that require dynamic parameters should override this method and return the /// dynamic parameter object. /// /// /// The context under which the command is running. /// /// /// An object representing the dynamic parameters for the cmdlet or null if there /// are none. /// internal override object GetDynamicParameters(CmdletProviderContext context) { if (Path != null && Path.Length > 0) { return InvokeProvider.Property.CopyPropertyDynamicParameters( Path[0], Name, Destination, Name, context); } return InvokeProvider.Property.CopyPropertyDynamicParameters( ".", Name, Destination, Name, context); } #endregion Parameters #region parameter data #endregion parameter data #region Command code /// /// Copies the property from one item to another. /// protected override void ProcessRecord() { foreach (string path in Path) { try { InvokeProvider.Property.Copy( path, Name, Destination, Name, GetCurrentContext()); } catch (PSNotSupportedException notSupported) { WriteError( new ErrorRecord( notSupported.ErrorRecord, notSupported)); continue; } catch (DriveNotFoundException driveNotFound) { WriteError( new ErrorRecord( driveNotFound.ErrorRecord, driveNotFound)); continue; } catch (ProviderNotFoundException providerNotFound) { WriteError( new ErrorRecord( providerNotFound.ErrorRecord, providerNotFound)); continue; } catch (ItemNotFoundException pathNotFound) { WriteError( new ErrorRecord( pathNotFound.ErrorRecord, pathNotFound)); continue; } } } #endregion Command code } }