在powershell中向数组添加逻辑
Adding logic to array in powershell
我导入了一个 CSV 文件并从数据中创建了一个数组。我需要拆分使用split的域名,但是有些名称是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"
您可以使用 IPAddress.TryParse
method 来确定 String
是否代表 IP 地址...
$Record = @{
'Client Name' = if ([IPAddress]::TryParse($_.Name, [Ref] $null)) {
$_.Name
} else {
$_.Name.Split('.')[0]
}
# ...
}
IPAddress
class 存在类型加速器,因此我们也不需要指定名称空间(即 [System.Net.IPAddress]
)。如果成功,TryParse
的第二个参数用于 return 从第一个参数解析的 IPAddress
实例。我们不需要这个 IPAddress
实例,所以我们只传递 $null
。
此外,这只是一个文体注释,您不需要并且通常不会用引号将 属性 名称括起来(例如 $_."AgentServerType"
),除非 属性 名称包含空格.
您可以使用
而不是使用 .split() 方法
基于 RegEx 的 -split 运算符,带有 negative lookahead 以在数字后跟时禁止拆分。
顺便说一句,$Record 并不重要。
$NewCSV = $a | ForEach-Object {
New-Object PSObject -Prop @{
'Client Name' =($_.Name -split '\.(?!\d{1,3}(\.|$))')[0]
'Policy Name' = $_.AgentServerType
'Backup State' = $_.BackupStatus
'logon' = $_.LogonAccountTestStatus
'account' = $_.LogonAccount
}
} | Select "Client Name","Policy Name","Backup State",logon,account
我导入了一个 CSV 文件并从数据中创建了一个数组。我需要拆分使用split的域名,但是有些名称是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"
您可以使用 IPAddress.TryParse
method 来确定 String
是否代表 IP 地址...
$Record = @{
'Client Name' = if ([IPAddress]::TryParse($_.Name, [Ref] $null)) {
$_.Name
} else {
$_.Name.Split('.')[0]
}
# ...
}
IPAddress
class 存在类型加速器,因此我们也不需要指定名称空间(即 [System.Net.IPAddress]
)。如果成功,TryParse
的第二个参数用于 return 从第一个参数解析的 IPAddress
实例。我们不需要这个 IPAddress
实例,所以我们只传递 $null
。
此外,这只是一个文体注释,您不需要并且通常不会用引号将 属性 名称括起来(例如 $_."AgentServerType"
),除非 属性 名称包含空格.
您可以使用
而不是使用 .split() 方法
基于 RegEx 的 -split 运算符,带有 negative lookahead 以在数字后跟时禁止拆分。
顺便说一句,$Record 并不重要。
$NewCSV = $a | ForEach-Object {
New-Object PSObject -Prop @{
'Client Name' =($_.Name -split '\.(?!\d{1,3}(\.|$))')[0]
'Policy Name' = $_.AgentServerType
'Backup State' = $_.BackupStatus
'logon' = $_.LogonAccountTestStatus
'account' = $_.LogonAccount
}
} | Select "Client Name","Policy Name","Backup State",logon,account