Это то, что я бы порекомендовал для другого сценария ios, который у вас есть.
ПРИМЕЧАНИЕ : Вы не должны использовать Invoke-Expression, но я хотел передать информацию, основанную на вашем предыдущем запросе, где вы хотели посмотреть, как она будет работать, если вы не используете - replace
. Я предоставляю -replace
, который следует учитывать, прежде чем использовать Invoke-Expression
.
1. Заменить два проиндексированных элемента
Вы можете заменить два проиндексированных элемента, используя метод -replace
для строки. В этих примерах вы можете прочитать данные из File с помощью Get-Content, и когда вы это сделаете, убедитесь, что вы передали это по Out-String
. В противном случае символ новой строки и другие специальные символы, похоже, исчезают.
$stampArray = @("208","209","210","211")
$peerlink1int = "49"
$template = 'interface Ethernet $peerlink1int
switchport trunk allowed vlan $Stamps[0]-$Stamps[-1],1111,1234'
#OR $template = Get-Content Your-File | Out-String
# You have to escape not only $, but also [ and ].
$template -replace '\$peerlink1int', $peerlink1int `
-replace '\$Stamps\[0\]', $stampArray[0] `
-replace '\$Stamps\[-1\]', $stampArray[-1] `
| Out-File C:\temp\replaced.txt
или
# Invoke-Expression can only work if your variable is covered with $() to include indecies
$peerlink1int = "49"
$stamps = @("208","209","210","211")
$template = 'interface Ethernet $peerlink1int
switchport trunk allowed vlan $($Stamps[0])-$($Stamps[-1]),1111,1234'
$result = Invoke-Expression "`"$template`""
Вывод , который вы получаете из обоих приведенных выше примеров:
interface Ethernet 49
switchport trunk allowed vlan 208-211,1111,1234
2. Замените несколько значений из массива
. Есть два способа сделать это. 1 - это Invoke-Expression
, который может вызывать опасные выражения в вашем скрипте, а другой - это -replace
метод.
$stampArray = @("208","209","210","211")
$template = 'interface Vlan$stamps
description V$stamps
ip address 192.168.$stamps.2/25
vrrp $stampnum ip 192.168.$stamps.1
vrrp $stampnum description Stamp$stamps'
# Using Invoke-Expression
$stampnum = 1
$result = @()
foreach($stamps in $stampArray) {
$result += Invoke-Expression "`"$template`"" #$stamps and $stampnum will be replaced in the document.
$stampnum ++
}
# Or you can do with the replace command
$stampnum = 1
$result = @()
foreach($stamps in $stampArray) {
$result += $template -replace '\$stamps', $stamps -replace '\$stampnum', $stampnum++
}
$result | Out-File C:\temp\replaced.txt
И, Вывод , который вы получите,
interface Vlan208
description V208
ip address 192.168.208.2/25
vrrp 1 ip 192.168.208.1
vrrp 1 description Stamp208
interface Vlan209
description V209
ip address 192.168.209.2/25
vrrp 2 ip 192.168.209.1
vrrp 2 description Stamp209
interface Vlan210
description V210
ip address 192.168.210.2/25
vrrp 3 ip 192.168.210.1
vrrp 3 description Stamp210
interface Vlan211
description V211
ip address 192.168.211.2/25
vrrp 4 ip 192.168.211.1
vrrp 4 description Stamp211