Добавление логики в массив в powershell - PullRequest
0 голосов
/ 17 ноября 2018

Я импортировал файл 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"

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Вместо использования метода .split () вы можете использовать
Оператор -Exlit на основе RegEx с отрицательным прогнозом , чтобы запретить расщепление, если следует цифра.

Кстати, $ Record не является mecessary.

$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
0 голосов
/ 17 ноября 2018

Вы можете использовать метод IPAddress.TryParse , чтобы определить, представляет ли 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"), если только имя свойства не содержит пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...