【发布时间】:2019-05-29 01:49:54
【问题描述】:
我需要一些有关 Powershell 脚本的帮助,该脚本从文本文件中读取指定行并使用 txt 文件中的值创建一个新变量。变量名应该是 $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")
其实Value是Test123$number,所以Powershell不会把$number转换成之前在变量中声明的数字。
【问题讨论】:
-
这是一种处理变量的糟糕技术。您应该考虑改用数组或哈希表。如果你真的想使用这种方法,那么你应该从文本文件中发布一些示例内容,以便人们可以看到你的代码正在处理什么。
-
请将您正在使用的文件之一的内容添加到您的原始帖子中。
-
感谢您添加 TXT 文件信息。 [grin] 现在,您如何将
%SomeNameHere%信息输入 PoSh - 或者您是否希望保持不变? -
这正是我的问题。我想用 %SomeNameHere% 用新创建的变量中的值更改文本文件中的值。所以变量计算机名应该是值 PC-Name-$DeviceID。如果我检查 $deviceid 的值,它工作正常。但是,如果我为 $computername 设置值,那么它将返回我 PC-Name-$DeviceID 而不是 PC-NAME-11
标签: powershell