c# - Powershell哈希表作为C#中自定义cmdlet的参数

标签 c# powershell parameters

我在PS(2.0)中使用自定义类已有一段时间了:

import-module .\MyClassLib.dll

$task = New-Object MyClassLib.OracleScript -Property @{
                                                            Files="MyScript.sql" 
                                                            Database="TEST"
                                                            User="USER" 
                                                            Password="PASSWORD"  
                                                        }
$result = $task.Execute()

这样就可以了。

但是我想在C#中创建一个CmdLet来代替工作。因此,在创建了cmdlet之后,我认为我可以执行以下操作之一:
Invoke-OracleScript @{
                            Files="Script.sql" 
                            Database="db"
                            User="user" 
                            Password="password"  
                           }

Invoke-OracleScript @{
                            Files="Script.sql"; 
                            Database="db";
                            User="user"; 
                            Password="password";  
                           }

Invoke-OracleScript -Property @{
                            Files="Script.sql"
                            Database="db"
                            User="user"
                            Password="password"  
                           }

但是没有运气。 :(。

我不断收到类似的错误:
  • 找不到文件System.Collections.Hashtable(它认为整个哈希表是Files参数)
  • 找不到与参数名称“Property”匹配的参数
  • 还有更多。

  • 我的课:
    [Cmdlet(VerbsLifecycle.Invoke, "OracleScript", ConfirmImpact = ConfirmImpact.High, SupportsShouldProcess = true, SupportsTransactions = false)]
    public class Invoke_OracleScript : Cmdlet, IOracleScript
    {
        [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
        public string Files { get; set; }
    
        [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
        public string Database { get; set; }
        ....
    

    如果我改用这样的参数:-Files“” -Database“”,它可以正常工作,但是所有内容必须在1行上,这对读取非常不利。因此,哈希表确实是我最大的愿望:)。

    谁能向我解释我在这里缺少什么?
    (ParameterSets ?,我在文档中找不到的 secret 属性,其他)

    亲切的问候

    最佳答案

    如果只需要使cmdlet调用多行,则可以使用backtick(`)将命令扩展到下一行:

    get-process -Name notepad `
                -Computername localhost `
                -Verbose
    

    或者,您可以创建自定义对象:
    $process = new-object psobject
    $process | add-member -name name -value notepad -type noteproperty
    $process | add-member -name computername -value localhost -type noteproperty
    $process | get-process
    

    或者,您正在做什么:
    $process = new-object psobject -property @{ name="notepad";
                                                computername = "localhost";}
    
    $process | get-process
    

    我认为哈希表作为对象是v3.0中新增的一项功能(当前在CTP中)

    关于c# - Powershell哈希表作为C#中自定义cmdlet的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144477/

    相关文章:

    c# - 在 Visual Studio 中的设计时列出所有公共(public)类属性和字段

    c# - 如何遍历Excel C#的实例

    python - 安装 Python 3.6.3 - 我的 Win8Pro64 位计算机缺少 "api-ms-win-crt-runtime-l1-1-0.dll"

    post - 使用 POST 方法在 Swift 中进行 HTTP 请求

    python - flask 中有没有办法获取 request.json 中的每个对象并将每个属性保存在模型上?

    c - 当我们可以在函数内部使用 strlen() 来获取单词的长度时,为什么我们将字符串的长度作为参数发送给函数?

    c# - 查找以 "+"或 "-"开头的字符串中的十进制数字

    c# - 用 rhino mocks 对一个属性进行 stub 两次

    powershell - 没有参数时如何在powershell中显示Get-Help

    powershell - 根据 FileName 将分割 FileName 的一部分写入 doc