将可缓存的数组从C#传递到PowerShell

时间:2017-09-12 10:50:39

标签: c# powershell

如何将数组从C#传递到PowerShell,可以foreach编辑?

现在我有这个脚本:

[Cmdlet(VerbsCommon.Get, "Numbers")]
public class GetNumbersCmdlet: Cmdlet
{
    protected override void BeginProcessing()
    {
        var list = new List<string>();
        list.Add("1");
        list.Add("2");
        list.Add("3");
        list.Add("4");
        list.Add("5");
        WriteObject(results.ToArray());
    }
}

这个PowerShell脚本:

foreach ($number in Get-Numbers) {
    Write-Output "Output is $number"
}

而不是:

Output is 1
Output is 2
Output is 3
Output is 4
Output is 5

我会得到:

Output is 1 2 3 4 5

1 个答案:

答案 0 :(得分:1)

PowerShell不会自动枚举命令输出。这意味着如果命令将集合写入管道,那么该集合将作为单个对象传递给下一个命令。

除非明确询问,否则

[Cmdlet(VerbsCommon.Get, "Numbers")] public class GetNumbersCmdlet: Cmdlet { protected override void BeginProcessing() { WriteObject("1"); WriteObject("2"); WriteObject("3"); WriteObject("4"); WriteObject("5"); } } 也不会枚举对象。

因此,要解决您的问题,您可以随时编写对象而不是收集它们:

WriteObject

或者您可以要求[Cmdlet(VerbsCommon.Get, "Numbers")] public class GetNumbersCmdlet: Cmdlet { protected override void BeginProcessing() { var list = new List<string>(); list.Add("1"); list.Add("2"); list.Add("3"); list.Add("4"); list.Add("5"); WriteObject(results, true); } } 枚举您的收藏品:

create table MOCK_DATA (
  id INT,
  employeeID VARCHAR(50),
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  phone VARCHAR(50),
  email VARCHAR(50),
  gender VARCHAR(50),
  country VARCHAR(50),
  city VARCHAR(50),
  salary VARCHAR(50);

    insert into MOCK_DATA (id, employeeID, first_name, last_name, phone, email, gender, country, city, salary) 
values 
(1, '61-8930771', 'Piotr', 'Haglinton', '1(564)296-4462', 'phaglinton0@cbslocal.com', 'Male', 'Canada', 'Waterloo', '$6862.20');

请注意,在这两种情况下,您不再编写数组,而是编写它的各个项目。