何时在 PowerShell 脚本中使用 C#对象

When to Use C# in a PowerShell Script | PSObject

在某些情况下,管理员是否希望避免将 C# 写入 PowerShell 脚本?

例如,我喜欢从 xml 控制文件配置我的 PowerShell 脚本。但是基于这些控制文件创建任务是令人生畏的,因为很难在 PowerShell 中创建能够保存我喜欢的数据结构的健壮对象。有方法如:

$myObject = New-Object -TypeName PSObject

但我发现我经常希望我可以将数组、哈希表等保存在这些对象中。最简单的方法是创建一个 C# 构造函数——因为我不知道有什么方法可以将哈希表保存在 PSObject 属性.

Add-Type -Language CSharp @"
public class myObject{
    public String myString;
    public hashtable myHash;
}

1.) 'OKAY' 在PowerShell中普遍使用C#是不是因为这个原因?这是在 PSv5 出现并引入 Class 构造之前每个人都在做的事情吗?

2.) 是否需要额外维护以维护 C# 代码?

Ex.) 我从服务器 2012 升级到 2016——保留 powershell 脚本。我知道 powershell 是向前兼容的,但是 C# 呢?

从技术角度来看,没有什么反对在 PowerShell 中使用 C# 的。但是,我会尽量避免,因为这会使您的脚本更难阅读和维护

在您的示例中,您可以编写一个函数来为您创建对象:

function New-MyObject
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)]
        [string]$myString,

        [Parameter(Mandatory=$true)]
        [hashtable]$myHash
    )

    [PSCustomObject]@{
        MyString = $myString
        MyHash = $myHash
    }
}