PSCmdlet Глобализация / Локализация - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь разработать Powershell PSCmdLet с использованием C# и хочу загрузить справочные сообщения для параметров командлета из ресурса .resx, который я только что добавил в свойства проекта, но безуспешно.
Я думал, что я допустил ошибку при установке значений для HelpMessageBaseName и HelpMessageResourceId свойств атрибута ParameterAttribute в свойствах командлета. Тем не менее, используя значения, которые я использовал для этих свойств, я могу получить строку из ресурса во время выполнения.
Вы были бы так любезны, чтобы помочь мне разобраться в этом.

Project Files Contents of Resources.resx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.IO;
using VirusTotalClient.Properties;

namespace VirusTotalClient {

    [Cmdlet(verbName: VerbsCommon.Get, nounName: "VirusTotalReport", DefaultParameterSetName = "By Hash")]
    public class GetVirusTotalReport : PSCmdlet {
        public GetVirusTotalReport() { }

        [Parameter(
            Mandatory = true,
            ValueFromPipeline = true,
            ValueFromPipelineByPropertyName = true,
            ParameterSetName = "By Hash",
            HelpMessageBaseName = "VirusTotalClient.Properties.Resources",
            HelpMessageResourceId = "ByHash"
        )]
        public string[] Hash { get; set; }

        [Parameter(
            Mandatory = true,
            ValueFromPipeline = true,
            ValueFromPipelineByPropertyName = true,
            ParameterSetName = "By Path",
            HelpMessage = "Sample"
        )]
        [Alias("FullName")]
        public FileInfo[] Path { get; set; }

        protected override void BeginProcessing() {
            WriteVerbose("BeginProcessing\n");

            //var dbgX = GetResourceString(Resources.ResourceManager.BaseName, "ByHash");
            var dbgX = GetResourceString("VirusTotalClient.Properties.Resources", "ByHash");
            WriteVerbose(string.Format("[{0}]", dbgX));

            WriteVerbose(string.Format("__{0}__", Resources.ByHash));

            base.BeginProcessing();
        }

        protected override void EndProcessing() {
            WriteVerbose("EndProcessing\n");
            base.EndProcessing();
        }

        protected override void ProcessRecord() {
            WriteVerbose("ProcessingRecord\n");
            base.ProcessRecord();
        }

        protected override void StopProcessing() {
            WriteVerbose("StopProcessing\n");
            base.StopProcessing();
        }
    }
}

Результат Get-Help Get-VirusTotalReport -Parameter *:

-Hash <string[]>

    Required?                    true
    Position?                    Named
    Accept pipeline input?       true (ByValue, ByPropertyName)
    Parameter set name           By Hash
    Aliases                      None
    Dynamic?                     false


-Path <FileInfo[]>
    Sample

    Required?                    true
    Position?                    Named
    Accept pipeline input?       true (ByValue, ByPropertyName)
    Parameter set name           By Path
    Aliases                      FullName
    Dynamic?                     false

Результат Get-VirusTotalReport -Hash 1 -Verbose:

VERBOSE: BeginProcessing
VERBOSE: [ByHash Help Message]
VERBOSE: __ByHash Help Message__
VERBOSE: ProcessingRecord
VERBOSE: EndProcessing

Заранее спасибо :)

...