首页 > 解决方案 > 在powershell中向数组添加逻辑

问题描述

我已经导入了一个 CSV 文件并从数据中创建了一个数组。我需要拆分使用拆分的域名,但是其中一些名称是 IP 地址,因此也拆分了这些名称。

如何添加一些逻辑来进行正常拆分?但如果它是 IP 地址之类的数字,请忽略并打印它。

下面是我的示例数据,“客户名称”是我正在尝试使用的。

$NewCSV = $a | ForEach-Object {
$Record = @{
    'Client Name' = $_."Name".Split('.')[0]
    'Policy Name' = $_."AgentServerType"
'Backup State' = $_."BackupStatus"
'logon' = $_."LogonAccountTestStatus"
'account' = $_."LogonAccount"
    }
New-Object PSObject -Prop $Record
} | Select "Client Name","Policy Name","Backup State","logon","account"

标签: powershellpowershell-2.0

解决方案


您可以使用该IPAddress.TryParse方法来确定 a 是否String代表 IP 地址...

$Record = @{
    'Client Name' = if ([IPAddress]::TryParse($_.Name, [Ref] $null)) {
                        $_.Name
                    } else {
                        $_.Name.Split('.')[0]
                    }
    # ...
}

IPAddress该类存在一个类型加速器,因此我们也不需要指定命名空间(即[System.Net.IPAddress])。如果成功,第二个参数TryParse用于返回IPAddress从第一个参数解析的实例。我们不需要这个IPAddress实例,所以我们只是通过$null

此外,这只是一个风格说明,您不需要并且不典型地用引号将属性名称(例如$_."AgentServerType")括起来,除非属性名称包含空格。


推荐阅读