Я пытаюсь разработать Powershell PSCmdLet с использованием C# и хочу загрузить справочные сообщения для параметров командлета из ресурса .resx, который я только что добавил в свойства проекта, но безуспешно.
Я думал, что я допустил ошибку при установке значений для HelpMessageBaseName
и HelpMessageResourceId
свойств атрибута ParameterAttribute
в свойствах командлета. Тем не менее, используя значения, которые я использовал для этих свойств, я могу получить строку из ресурса во время выполнения.
Вы были бы так любезны, чтобы помочь мне разобраться в этом.
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
Заранее спасибо :)