2 votes

PowerShell lit à partir d'un fichier, recherche une chaîne de caractères et supprime le texte indésirable

Je travaille sur un script pour sauvegarder les paramètres DNS d'une carte réseau et les modifier après d'autres actions.

$BACKUP = Get-DnsClientServerAddress -InterfaceAlias WLAN* >>c:\tmp\dns.txt

contenu de dns.txt

InterfaceAlias               Interface Address ServerAddresses                                                                          
                             Index     Family                                                                                           
--------------               --------- ------- ---------------                                                                          
WLAN 2                               6 IPv4    {1.1.1.1, 8.8.8.8}                                                                  
WLAN 2                               6 IPv6    {}          

Maintenant, pour la restauration, j'ai juste besoin des 2 IP entre les {}, donc je commence avec

$OLD = Get-Content C:\tmp\dns.txt | Select-String -Pattern 'ipv4' -SimpleMatch

ce qui me laisse avec

WLAN 2                               6 IPv4    {1.1.1.1, 8.8.8.8}

mais comment puis-je me débarrasser du reste pour n'avoir que les 2 IP qui restent dans $Old.

merci pour votre aide

0voto

CrL_HY Points 21

Après avoir essayé un peu plus, je vais répondre à ma propre question.

$Old = Get-Content C:\tmp\dns.txt | Select-String -Pattern 'ipv4' -SimpleMatch
$Old = Get-TextWithin $Old -StartChar '{' -EndChar '}'
$DNS = $Old -split ',\s*'

function Get-TextWithin {

    [CmdletBinding()]
    param( 
        [Parameter(Mandatory, 
            ValueFromPipeline = $true,
            Position = 0)]   
        $Text,
        [Parameter(ParameterSetName = 'Single', Position = 1)] 
        [char]$WithinChar = '"',
        [Parameter(ParameterSetName = 'Double')] 
        [char]$StartChar,
        [Parameter(ParameterSetName = 'Double')] 
        [char]$EndChar
    )
    $htPairs = @{
        '(' = ')'
        '[' = ']'
        '{' = '}'
        '<' = '>'
    }
    if ($PSBoundParameters.ContainsKey('WithinChar')) {
        $StartChar = $EndChar = $WithinChar
        if ($htPairs.ContainsKey([string]$WithinChar)) {
            $EndChar = $htPairs[[string]$WithinChar]
        }
    }
    $pattern = @"
(?<=\$StartChar).+?(?=\$EndChar)
"@
    [regex]::Matches($Text, $pattern).Value
}

0voto

Vous n'avez pas besoin d'enregistrer dans un fichier texte et d'y analyser des chaînes de caractères avec des expressions rationnelles. Le site Get-DnsClientServerAddress La commande a un -AddressFamily où vous spécifiez "IPv4" pour obtenir uniquement ces adresses.

PowerShell

(Get-DnsClientServerAddress -InterfaceAlias WLAN* -AddressFamily "IPv4").ServerAddresses

Ressources d'appui

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X