Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String PowerShell:使用字符串和哈希表_String_Powershell_Hashtable - Fatal编程技术网

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

如果您只需使用换行符替换所有
&&&
并使用cmdlet
ConvertFrom-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]谢谢!