【问题标题】:When to Use C# in a PowerShell Script | PSObject何时在 PowerShell 脚本中使用 C# PS对象
【发布时间】:2017-09-18 12:14:04
【问题描述】:

在某些情况下管理员不想将 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.) 出于这个原因,在 PowerShell 中通常使用 C# 是否可以?这是在 PSv5 出现并引入 Class 构造之前每个人都在做的事情吗?

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

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

【问题讨论】:

  • 一般来说,在 PowerShell 中工作时,我认为内联 C# 仅应作为最后的手段,如果没有其他明智的方法可以实现预期目标。
  • @JeffZeitlin 你能解释一下你为什么采取这种立场吗?
  • 我认为这没有任何问题。我使用将 XAML 用于 UI 的 PS 脚本来执行此操作。保持清洁即可。
  • 抱歉,无法理解您的想法。在 PS 5.0 中,您可以构建自己的类。只需搜索 PowerShell 类。
  • @autosvet 我知道 PS5 很棒,但我的问题是关于 PS3 和更早版本的(见标签,我特别提到“在 PSv5 出现之前”

标签: c# powershell powershell-3.0


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2014-09-27
    • 2018-12-16
    • 2021-10-13
    • 2020-09-30
    相关资源
    最近更新 更多