Создать новую переменную Powershell со значениями от replace - PullRequest
0 голосов
/ 20 мая 2019

Мне нужна помощь с скриптом Powershell, который читает заданные строки из текстового файла и создает новую переменную со значениями из txtfile.Имя переменной должно быть $ var1, а значение должно быть $ var2.

Значение новой созданной переменной должно быть примерно таким:

$number = 4
$Computername = "Test123$number"
$txt = Get-Content -Path .xyz.txt | Where-Object {$_ -like '@set*'}

foreach ($line in $txt){
    $firstclip=$line.IndexOf("(")
    $delimiter=$line.IndexOf(",")
    $lastclip=$line.IndexOf(")")

    $var1=$line.Substring($firstclip+1,$delimiter - ($firstclip + 1))
    $var2=$line.Substring($delimiter+1,$lastclip - ($delimiter + 1))
    $var2=$var2 -replace '%([^-]+)%','$$$1'

    Write-Host $var1
    Write-host $var2

    #New-Variable -Name $var1 -Value $var2
}

Содержимое файла TXT .xyz.txt:

@Set(DeviceID, 11)
@Set(ComputerName, PC-Name-%DeviceID%)

@Set(Nic0Name, LAN)
@Set(Nic0Ip, 10.42.50.101)
@Set(Nic0Mask, 255.255.255.0)
@Set(Nic0Gateway, 10.42.50.50)

@Set(AmsNetId, %Nic0Ip%.1.1)

@Set(AmsRoute0Name, PC-NAME-01)
@Set(AmsRoute0Ip, 10.42.50.51)
@Set(AmsRoute0AmsNetId, %AmsRoute0Ip%.1.1)

@Set(VAS, 10.42.50.42)
@Set(IEHomePage, http://%VAS%/web/PC-0%DeviceID%.html)

@Set(IEPath, "C:\Program Files\Internet Explorer\iexplore.exe")

На самом деле значение равно Test123 $ number, поэтому Powershell не будет преобразовывать число $ в число, объявленное в переменной ранее.

1 Ответ

0 голосов
/ 20 мая 2019

Я бы использовал оператор -split с альтернативой для обработки строк ввода,
и проверьте с помощью if и RegEx, есть ли% var% для замены текущим содержимым $ var.

РЕДАКТИРОВАТЬ: чтобы лучше визуализировать изменения, выведите [PSCustomObject]
EDIT2: необходимо переключиться на Select-String с -AllMatches

## Q:\Test\2019\05\20\SO_56218447.ps1

$txt = Get-Content -Path .xyz.txt | Where-Object {$_ -like '@set*'}
$RE = '%([^%]+)%'

foreach ($line in $txt){
    $Name,$Value = ($line -split '\(|\)|, ')[1,2]
    $NewValue = $Value
    ($Value)|Select-String -Pattern $RE -AllMatches | ForEach-Object {$_.Matches}|ForEach-Object{
        $NewValue = $NewValue -replace $_.value,(Get-Variable -Name $_.value.Trim('%')).Value
    }
    New-Variable -Name $Name -Value $NewValue
    [PSCustomObject]@{
        Variable = $Name
        Value    = $Value
        NewValue = $NewValue
    }
}

Пример вывода

> Q:\Test\2019\05\20\SO_56218447.ps1

Variable          Value                                             NewValue
--------          -----                                             --------
DeviceID          11                                                11
ComputerName      PC-Name-%DeviceID%                                PC-Name-11
Nic0Name          LAN                                               LAN
Nic0Ip            10.42.50.101                                      10.42.50.101
Nic0Mask          255.255.255.0                                     255.255.255.0
Nic0Gateway       10.42.50.50                                       10.42.50.50
AmsNetId          %Nic0Ip%.1.1                                      10.42.50.101.1.1
AmsRoute0Name     PC-NAME-01                                        PC-NAME-01
AmsRoute0Ip       10.42.50.51                                       10.42.50.51
AmsRoute0AmsNetId %AmsRoute0Ip%.1.1                                 10.42.50.51.1.1
VAS               10.42.50.42                                       10.42.50.42
IEHomePage        http://%VAS%/web/PC-0%DeviceID%.html              http://10.42.50.42/web/PC-011.html
IEPath            "C:\Program Files\Internet Explorer\iexplore.exe" "C:\Program Files\Internet Explorer\iexplore.exe"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...