我在c#中编写了一个powershell模块,它由一堆PowerShell cmdlet组成.
例如:
得到应用
当我宣布上课时
[Cmdlet(VerbsCommon.Get, "Application")]
public class GetApplication : PSCmdlet
Run Code Online (Sandbox Code Playgroud)
我可以执行诸如为此cmdlet提供参数以及有关参数本身的有用消息之类的操作.
我正在尝试在我的类中提供更多文档,以便命令如此
get-help get-application
将在REMARKS部分中提供有关cmdlet本身的说明.
知道如何在visual studio 2013中添加它吗?
我正在尝试为PowerShell管理单元创建自己的cmdlet集.我遇到的问题是我创建了自己的对象,我在ProcessRecord方法中创建和填充但我无法更改返回类型以允许我返回我创建的对象.
protected override void ProcessRecord()
{
ReportFileSettings rptFileSettings = new ReportFileSettings();
rptFileSettings.Enabled = string.Equals((reader.GetAttribute("Enabled").ToString().ToLower()), "yes");
rptFileSettings.FileLocation = reader.GetAttribute("FileLocation").ToString();
rptFileSettings.OverwriteExisting = string.Equals(reader.GetAttribute("OverwriteExistingFile").ToString().ToLower(), "yes");
rptFileSettings.NoOfDaysToKeep = int.Parse(reader.GetAttribute("NumberOfDaysToKeep").ToString());
rptFileSettings.ArchiveFileLocation = reader.GetAttribute("ArchiveFileLocation").ToString();
return rptFileSettings;
}
Run Code Online (Sandbox Code Playgroud)
这是我的ProcessRecord方法,但是因为它覆盖了PSCmdlet中的那个,所以无法从void更改返回类型.
任何人都可以帮助返回rptFileSettings对象的最佳方法,以便我可以将其与其他cmdlet中的值一起使用吗?
假设您正在C#中编写一些PSCmdLet:
/// <summary>
/// Get a stack overflow exception.
/// </summary>
[Cmdlet(VerbsCommon.Join, "StackOverflow")]
[OutputType(typeof(OverflowException))]
public class JoinStackOverflow : PSCmdlet {
protected override void ProcessRecord() {
throw new OverflowException("stack");
}
}
Run Code Online (Sandbox Code Playgroud)
如果将定义上述内容的模块加载到PowerShell中,该命令help Join-StackOverflow将返回以下内容:
NAME
Join-StackOverflow
SYNTAX
Join-StackOverflow [<CommonParameters>]
ALIASES
None
REMARKS
None
Run Code Online (Sandbox Code Playgroud)
我如何为此cmdlet添加简介/摘要,例如,与for相同Get-Process:
NAME
Get-Process
SYNOPSIS
Gets the processes that are running on the local computer or a remote computer.
...
Run Code Online (Sandbox Code Playgroud) 我有一个 powershell 脚本,我在其中实现了具有高 ConfirmImpact 的 should process 方法,以确保出现提示。
提示按预期工作,但未输入任何内容时的默认响应为“Y”
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Run Code Online (Sandbox Code Playgroud)
有没有办法将默认响应更改为“N”?如果用户想要应用脚本,我希望用户必须明确输入 Y。我已经编写了一个非常笨拙的脚本,我想要的最后一件事是让脚本用户只需按 Enter 键,而无需验证他们将其应用于什么。
我已经阅读了关于它的文档,但在任何地方都没有提到这一点。
我想对用户隐藏 PowerShell Cmdlet 参数。有没有办法在 C# 中做到这一点?
我想在我的代码中使用此参数来触发具有隐藏参数的相同 cmdlet。
我使用 PowerShell 2.0。
谢谢。
在powershell中,某些参数具有动态自动完成行为.例如,Get-Process参数Name.我可以使用TAB迭代我的所有进程.

我想在我的PSCmdlet中使用此行为.
但问题是,我只知道如何使用静态自动完成值来做到这一点.看例子:
public class TableDynamicParameters
{
[Parameter]
[ValidateSet("Table1", "Table2")]
public string[] Tables { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是一个如何使用原生powershell http://blogs.technet.com/b/heyscriptingguy/archive/2014/03/21/use-dynamic-parameters-to-populate-list-of-printer-names完成此操作的示例. ASPX
它适用 于@bouvierr
public string[] Tables { get; set; }
public object GetDynamicParameters()
{
if (!File.Exists(Path)) return null;
var tableNames = new List<string>();
if (TablesCache.ContainsKey(Path))
{
tableNames = TablesCache[Path];
}
else
{
try
{
tableNames = DbContext.GetTableNamesContent(Path);
tableNames.Add("All");
TablesCache.Add(Path, tableNames);
}
catch (Exception e){}
}
var runtimeDefinedParameterDictionary = new RuntimeDefinedParameterDictionary();
runtimeDefinedParameterDictionary.Add("Tables", new RuntimeDefinedParameter("Tables", typeof(String), new Collection<Attribute>() { new …Run Code Online (Sandbox Code Playgroud) 我正在使用C#开发PowerShell cmdlet,并且具有true/false switch语句.我注意到我需要指定-SwitchName $ true,如果我想要bool为true,否则我得到:
Missing an argument for parameter 'SwitchName'. Specify a parameter of type 'System.Boolean' and try again.
Run Code Online (Sandbox Code Playgroud)
开关装饰如下:
[Parameter(Mandatory = false, Position = 1,
, ValueFromPipelineByPropertyName = true)]
Run Code Online (Sandbox Code Playgroud)
我怎样才能检测到交换机的存在(-SwitchName设置为true,缺少-SwitchName表示为false)?
pscmdlet ×7
c# ×6
powershell ×6
cmdlets ×2
cmdlet ×1
function ×1
remarks ×1
return-type ×1
scripting ×1