从文件中读取多个变量的Powershell脚本
Powershell script to read multiple variable from file
我有一个在远程计算机上调用会话的脚本和 运行 一个脚本。
$pw = convertto-securestring -AsPlainText -Force -String '$(PWD_vSphere_AdminUser)'
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist ".\Administrator",$pw
Invoke-Command -Credential $Cred -ComputerName 'testcomputer' -FilePath "./addvm.ps1"
这很好用。现在我必须在多台计算机上 运行 它。我想从 tfvars 文件(json 格式)中读取 -ComputerName 值。其中 name = "testcomputer" 出现多次。我想从 tfvars 文件(json 格式)和 运行 我的脚本中读取每个“名称”值的这个“名称”值。
{
"vm": [
{
"testcomputer": [
{
"memory": "4096",
"name": "testcomputer",
"time_zone": "020"
}
],
"testcomputer1": [
{
"memory": "4096",
"name": "testcomputer1",
"time_zone": "020"
}
],
"testcomputer2": [
{
"memory": "4096",
"name": "testcomputer2",
"time_zone": "020"
}
]
}
]
}
我读过这篇文章Powershell retrieving a variable from a text file,但这并不能解决很多问题。
如果您分享的内容确实是您将获得的输入,一种处理方法是使用正则表达式,但如果可以某种方式将其作为对象输入,JSON 或 XML 或任何可以读取并正确转换为对象的东西,你应该这样做而不是正则表达式。
从正则表达式开始,从字面上读取您显示的输入,您可以这样做:
$inputVar = @"
vm = {
"testcomputer" = {
name = "testcomputer"
memory = "4096"
time_zone = "020"
}
"testcomputer1" = {
name = "testcomputer1"
memory = "4096"
time_zone = "020"
}
"testcomputer2" = {
name = "testcomputer2"
memory = "4096"
time_zone = "020"
}
}
"@
#the matching pattern.
$regexFormat = '(?<=name = ").[^"]*'
#Grab only the matching pattern items.
$computerList = [regex]::Matches($inputVar, $regexFormat) | ForEach-Object { $_.value }
foreach ($computer in $computerList) {
$pw = convertto-securestring -AsPlainText -Force -String '$(PWD_vSphere_AdminUser)'
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist ".\Administrator", $pw
Invoke-Command -Credential $Cred -ComputerName $computer -FilePath "./addvm.ps1"
}
我用 $inputVar
进行了字面输入只是为了展示示例,然后您可以对每台计算机执行 foreach 循环 运行 您的代码。
我有一个在远程计算机上调用会话的脚本和 运行 一个脚本。
$pw = convertto-securestring -AsPlainText -Force -String '$(PWD_vSphere_AdminUser)'
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist ".\Administrator",$pw
Invoke-Command -Credential $Cred -ComputerName 'testcomputer' -FilePath "./addvm.ps1"
这很好用。现在我必须在多台计算机上 运行 它。我想从 tfvars 文件(json 格式)中读取 -ComputerName 值。其中 name = "testcomputer" 出现多次。我想从 tfvars 文件(json 格式)和 运行 我的脚本中读取每个“名称”值的这个“名称”值。
{
"vm": [
{
"testcomputer": [
{
"memory": "4096",
"name": "testcomputer",
"time_zone": "020"
}
],
"testcomputer1": [
{
"memory": "4096",
"name": "testcomputer1",
"time_zone": "020"
}
],
"testcomputer2": [
{
"memory": "4096",
"name": "testcomputer2",
"time_zone": "020"
}
]
}
]
}
我读过这篇文章Powershell retrieving a variable from a text file,但这并不能解决很多问题。
如果您分享的内容确实是您将获得的输入,一种处理方法是使用正则表达式,但如果可以某种方式将其作为对象输入,JSON 或 XML 或任何可以读取并正确转换为对象的东西,你应该这样做而不是正则表达式。
从正则表达式开始,从字面上读取您显示的输入,您可以这样做:
$inputVar = @"
vm = {
"testcomputer" = {
name = "testcomputer"
memory = "4096"
time_zone = "020"
}
"testcomputer1" = {
name = "testcomputer1"
memory = "4096"
time_zone = "020"
}
"testcomputer2" = {
name = "testcomputer2"
memory = "4096"
time_zone = "020"
}
}
"@
#the matching pattern.
$regexFormat = '(?<=name = ").[^"]*'
#Grab only the matching pattern items.
$computerList = [regex]::Matches($inputVar, $regexFormat) | ForEach-Object { $_.value }
foreach ($computer in $computerList) {
$pw = convertto-securestring -AsPlainText -Force -String '$(PWD_vSphere_AdminUser)'
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist ".\Administrator", $pw
Invoke-Command -Credential $Cred -ComputerName $computer -FilePath "./addvm.ps1"
}
我用 $inputVar
进行了字面输入只是为了展示示例,然后您可以对每台计算机执行 foreach 循环 运行 您的代码。