簡體   English   中英

PowerShell:使用字符串和哈希表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM