标签: pscmdlet

如何为pscmdlet类设置帮助信息

我在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中添加它吗?

c# remarks pscmdlet

7
推荐指数
0
解决办法
133
查看次数

从PowerShell cmdlet返回对象

我正在尝试为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# powershell cmdlets return-type pscmdlet

6
推荐指数
1
解决办法
3755
查看次数

如何在C#中为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)

c# powershell cmdlet pscmdlet

5
推荐指数
1
解决办法
1535
查看次数

Powershell Cmdlet.ShouldProcess 方法默认答案

我有一个 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 scripting function pscmdlet powershell-v5.1

5
推荐指数
1
解决办法
675
查看次数

如何在 Cmdlet 中隐藏参数

我想对用户隐藏 PowerShell Cmdlet 参数。有没有办法在 C# 中做到这一点?

我想在我的代码中使用此参数来触发具有隐藏参数的相同 cmdlet。

我使用 PowerShell 2.0。

谢谢。

c# powershell cmdlets pscmdlet

3
推荐指数
1
解决办法
1784
查看次数

PSCmdlet动态自动完成一个参数(如Get-Process)

在powershell中,某些参数具有动态自动完成行为.例如,Get-Process参数Name.我可以使用TAB迭代我的所有进程.

Powershell自动完成参数

我想在我的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 pscmdlet

2
推荐指数
1
解决办法
1702
查看次数

检测PowerShell开关

我正在使用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)?

c# powershell pscmdlet

2
推荐指数
1
解决办法
677
查看次数