/
githubmirror
/
PowerShell
Обзор
Документация
Войти
/
githubmirror
/
PowerShell
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs
164 строки
5 KB
xtqqczze
Fix `IDisposable` implementation in sealed classes (#26215)
18 мар 2026, 21:46
Не верифицирован
18 мар 2026, 21:46
28a2e35
Код
Авторство
О чём код?
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System; using System.Management.Automation; using System.Text; using Microsoft.PowerShell.Commands.Internal.Format; namespace Microsoft.PowerShell.Commands { /// <summary> /// Class for Tee-object implementation. /// </summary> [Cmdlet("Tee", "Object", DefaultParameterSetName = "File", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097034")] public sealed class TeeObjectCommand : PSCmdlet, IDisposable { /// <summary> /// Object to process. /// </summary> [Parameter(ValueFromPipeline = true)] public PSObject InputObject { get { return _inputObject; } set { _inputObject = value; } } private PSObject _inputObject; /// <summary> /// FilePath parameter. /// </summary> [Parameter(Mandatory = true, Position = 0, ParameterSetName = "File")] [Alias("Path")] public string FilePath { get { return _fileName; } set { _fileName = value; } } private string _fileName; /// <summary> /// Literal FilePath parameter. /// </summary> [Parameter(Mandatory = true, ParameterSetName = "LiteralFile")] [Alias("PSPath", "LP")] public string LiteralPath { get { return _fileName; } set { _fileName = value; } } /// <summary> /// Append switch. /// </summary> [Parameter(ParameterSetName = "File")] public SwitchParameter Append { get { return _append; } set { _append = value; } } private bool _append; /// <summary> /// Gets or sets the Encoding. /// </summary> [Parameter(ParameterSetName = "File")] [Parameter(ParameterSetName = "LiteralFile")] [ArgumentToEncodingTransformation] [ArgumentEncodingCompletions] [ValidateNotNullOrEmpty] public Encoding Encoding { get; set; } = Encoding.Default; /// <summary> /// Variable parameter. /// </summary> [Parameter(Mandatory = true, ParameterSetName = "Variable")] public string Variable { get { return _variable; } set { _variable = value; } } private string _variable; /// <summary> /// </summary> protected override void BeginProcessing() { _commandWrapper = new CommandWrapper(); if (string.Equals(ParameterSetName, "File", StringComparison.OrdinalIgnoreCase)) { _commandWrapper.Initialize(Context, "out-file", typeof(OutFileCommand)); _commandWrapper.AddNamedParameter("filepath", _fileName); _commandWrapper.AddNamedParameter("append", _append); _commandWrapper.AddNamedParameter("encoding", Encoding); } else if (string.Equals(ParameterSetName, "LiteralFile", StringComparison.OrdinalIgnoreCase)) { _commandWrapper.Initialize(Context, "out-file", typeof(OutFileCommand)); _commandWrapper.AddNamedParameter("LiteralPath", _fileName); _commandWrapper.AddNamedParameter("append", _append); _commandWrapper.AddNamedParameter("encoding", Encoding); } else { // variable parameter set _commandWrapper.Initialize(Context, "set-variable", typeof(SetVariableCommand)); _commandWrapper.AddNamedParameter("name", _variable); // Can't use set-var's passthru because it writes the var object to the pipeline, we want just // the values to be written } } /// <summary> /// </summary> protected override void ProcessRecord() { _commandWrapper.Process(_inputObject); WriteObject(_inputObject); } /// <summary> /// </summary> protected override void EndProcessing() { _commandWrapper.ShutDown(); } /// <summary> /// Release all resources. /// </summary> public void Dispose() { if (!_alreadyDisposed) { _alreadyDisposed = true; if (_commandWrapper != null) { _commandWrapper.Dispose(); _commandWrapper = null; } } } #region private private CommandWrapper _commandWrapper; private bool _alreadyDisposed; #endregion private } }