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

标签 c# powershell powershell-3.0

在某些情况下,管理员是否希望避免将 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#。但是,我会尽量避免它,因为这会使您的脚本更难阅读和维护

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

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

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

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

关于c# - 何时在 PowerShell 脚本中使用 C#对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43543615/

相关文章:

powershell - 如何在里面加载带有 powershell v2 的 Powershell ISE 3?

powershell - 实例化空 csv 变量

c# - 当我不知道文化时 Double.TryParse 的问题

c# - 获取组中的选定单选按钮 (WPF)

linux - 执行脚本后,PowerShell 窗口始终会被清理

powershell - Powershell中的换行符 `r` n和`n之间有什么区别?

windows - Powershell ConvertTo-SecureString ObjectNotFound

c# - 解析邮件地址的正则表达式

c# - 需要帮助终止延迟执行

powershell - Get-Member 中的 ForEach 属性