[英]PowerShell: Working with Strings and Hashtables
我有這個代碼:
$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 行的注釋中做一些事情。我嘗試了幾種方法,但我總是得到一個靜態字符串,而不是我從 Hashtable 中得到的值。
最后,我想有類似的東西:
set pass1 = 12
set pass2 = 5
在 myFile.txt 中
任何幫助表示贊賞。 謝謝!
您可以將 Write-Host(僅打印到控制台)更改為 Write-Output(將對象傳遞到管道)。 寫輸出不會打印到控制台。
$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
如果您簡單地用換行符替換所有&&&
並使用 cmdlet ConvertFrom-StringData
則可以替換第一個 foreach 循環。
Add-Content
還有一個名為-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."
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.