我想在 Powershell 脚本中将字符串从 : 拆分为 \n

I want to split a string from : to \n in Powershell script

我正在使用一个配置文件,其中包含如下所示的一些信息。

User1:xyz@gmail.com
User1_Role:Admin
NAME:sdfdsfu4343-234324-ffsdf-34324d-dsfhdjhfd943
ID:xyz@abc-demo-test-abc-mssql
Password:rewrfsdv34354*fds*vdfg435434

我想在我的 Powershell 脚本中将每个值从*: 拆分为换行符*。 我正在使用 -split '[: \n]' 它完美匹配,直到值中没有 ''。如果有一个 '*' 它将获取到那个。例如,对于密码,它只匹配 rewrfsdv34354。这是我的代码:

$i = 0
foreach ($keyOrValue in $Contents -split '[: *\n]') {
  if ($i++ % 2 -eq 0) { 
    $varName = $keyOrValue 
  } 
  else { 
    Set-Variable $varName $keyOrValue 
  } 
}

我需要将 : 之后的所有字符匹配到 \n。请分享您的想法。

最好在这里执行两个单独的拆分,如果代码由于某种原因出错,这会使事情更容易解决,尽管 $i % 2 -eq 0 部分是一个很好的选择 key/value.

我会这样做:

# Split the Contents variable by newline first
foreach ($line in $Contents -split '[\n]') {
   # Now split each line by colon
   $keyOrValue = $line -split ':'
   # Then set the variables based on the parts of the colon-split
   Set-Variable $keyOrValue[0] $keyOrValue[1]
}

您也可以转换为哈希图并从那里开始,例如:

$h = @{}
gc config.txt | % { $key, $value = $_ -split ' *: *'; $h[$key] = $value } 

ConvertFrom-StringData:

$h = (gc -raw dims.txt) -replace ':','=' | ConvertFrom-StringData

现在您可以方便地访问键和值,例如:

$h

输出:

Name                           Value
----                           -----
Password                       rewrfsdv34354*fds*vdfg435434
User1                          xyz@gmail.com
ID                             xyz@abc-demo-test-abc-mssql
NAME                           sdfdsfu4343-234324-ffsdf-34324d-dsfhdjhfd943
User1_Role                     Admin

或者只有键:

$h.keys

输出:

Password
User1
ID
NAME
User1_Role

或只有值:

$h.values

输出:

rewrfsdv34354*fds*vdfg435434
xyz@gmail.com
xyz@abc-demo-test-abc-mssql
sdfdsfu4343-234324-ffsdf-34324d-dsfhdjhfd943
Admin

或具体值:

$h['user1'] + ", " + $h['user1_role']

输出:

xyz@gmail.com, Admin

等等