String PowerShell:使用字符串和哈希表
我有以下代码:String PowerShell:使用字符串和哈希表,string,powershell,hashtable,String,Powershell,Hashtable,我有以下代码: $passwordsParameters = "sysPassword = 12 &&& testPass = 13 &&& systemPassword = 10" $parametersList = @($passwordsParameters -split '&&&') $passwordsTable = @{} ForEach ($parameter in $parame
$passwordsParameters = "sysPassword = 12 &&& testPass = 13 &&& systemPassword = 10"
$parametersList = @($passwordsParameters -split '&&&')
$passwordsTable = @{}
ForEach ($parameter in $parametersList) {
$splitToKeyValue = @($parameter -split '=')
$passwordsTable += $passwordsTable = @{
$splitToKeyValue[0].trim() = $splitToKeyValue[1].trim()
}
}
ForEach ($pass in $passwordsTable.Keys) {
if ($passwordsTable[$pass] -ne "") {
Write-Host "set $pass ="$passwordsTable[$pass]""
} else {
Write-Host "A value for the parameter $pass was not entered."
}
}
# Add-Content "d:\myFile.txt" "set $pass ="$passwordsTable[$pass]""
当我使用Write Host时,它非常有效。但是我想做一些类似于第25行中的评论。我尝试了几种方法,但我总是得到一个静态字符串,而不是从哈希表中得到的值
最后,我想要一些类似于:
set pass1 = 12
set pass2 = 5
在myFile.txt中
感谢您的帮助。谢谢 您可以将写主机(仅打印到控制台)更改为写输出(将对象传递到管道)。写入输出不会打印到控制台
$passwordsParameters = "sysPassword = 12 &&& testPass = 13 &&& systemPassword = 10"
$parametersList = @($passwordsParameters -split '&&&')
$passwordsTable = @{}
ForEach ($parameter in $parametersList) {
$splitToKeyValue = @($parameter -split '=')
$passwordsTable += $passwordsTable = @{
$splitToKeyValue[0].trim() = $splitToKeyValue[1].trim()
}
}
$counter=0
ForEach ($pass in $passwordsTable.Keys) {
if ($passwordsTable[$pass] -ne "") {
$counter++
Write-Output "set "pass$counter = $passwordsTable[$pass]"`n" | Add-Content -NoNewline myFile.txt
} else {
Write-Host "A value for the parameter $pass was not entered."
}
}
输出:
set pass1=10
set pass2=13
set pass3=12
如果您只需使用换行符替换所有
&&&
并使用cmdletConvertFrom-StringData
,就可以替换第一个foreach循环
添加内容
还有一个名为-PassThru
的开关,它允许您写入文件并输出到控制台
$passwordsParameters = "sysPassword = 12 &&& testPass = 13 &&& systemPassword = 10"
$passwordsTable = $passwordsParameters -replace '&&&', [Environment]::NewLine | ConvertFrom-StringData
foreach ($pass in $passwordsTable.Keys) {
if ($passwordsTable[$pass]) {
$msg = 'set {0} = {1}' -f $pass, $passwordsTable[$pass]
# or use: $msg = "set $pass = $($passwordsTable[$pass])"
# write this to the file. switch -PassThru will also output to the console
Add-Content -Path 'D:\myFile.txt' -Value $msg -PassThru
} else {
Write-Host "A value for the parameter '$pass' was not entered."
}
}
谢谢你的回复。你能给我解释一下这句话吗:$msg='set{0}={1}'-f$pass,$passwordsTable[$pass]谢谢!