何时在 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
}
}
在某些情况下,管理员是否希望避免将 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
}
}