我有以下字符串,我尝试了以下分割机制来获取日期和帐户状态,但我认为我的分割或索引已关闭。
Write-host $result
@{AccountExpirationDate=1/23/2016 6:00:00 PM; userAccountControl=512}
$aed =($result -split '=')[0].substring(3)
write-host $aed
ccountExpirationDate - This should be 1/23/2016 6:00:00 PM
$aStatus =($result -split '=')[1].substring(3)
Write-host $aStatus
It should show 512 but it doesn't
===发布原始代码后添加=== 我尝试了下面的代码,它的工作方式有一半。我瘦我需要使用$ rightpath
启动相同的方法来获得分割日期和512PS C:\> $position = $result.indexof("=")
PS C:\> $rightpart = $result.substring($position+1)
PS C:\> write-host $rightpart
1/23/2016 6:00:00 PM; userAccountControl=512}
PS C:\>
答案 0 :(得分:1)
您的拆分操作不会按照您的想法执行。 $result -split '='
将=
处的字符串拆分为3部分:
@{AccountExpirationDate
1/23/2016 6:00:00 PM; userAccountControl
512}
索引访问[0]
选择这些部分中的第一个(@{AccountExpirationDate
),.Substring(3)
返回第4个字符(索引从0开始)到结尾的子字符串。字符串:
ccountExpirationDate
其他拆分操作相同。索引[1]
从同一个数组中选择第二个元素(1/23/2016 6:00:00 PM; userAccountControl
),.Substring(3)
返回第4个字符(索引从0开始)到该字符串结尾的子字符串:
3/2016 6:00:00 PM; userAccountControl
演示:
PS C:\> $result = "@{AccountExpirationDate=1/23/2016 6:00:00 PM; userAccountControl=512}"
PS C:\> $result
@{AccountExpirationDate=1/23/2016 6:00:00 PM; userAccountControl=512}
PS C:\> $a = $result -split '='
PS C:\> $a
@{AccountExpirationDate
1/23/2016 6:00:00 PM; userAccountControl
512}
PS C:\> $a[0].Substring(3)
ccountExpirationDate
PS C:\> $a[1].Substring(3)
3/2016 6:00:00 PM; userAccountControl
如果$result
实际上是字符串而不是哈希表,则应从字符串的开头和结尾删除@{
和}
:
$result -replace '^@{|}$'
以分号拆分以将键/值对彼此分开,然后拆分=
处的每个键/值对,以便将键与值分开。
$pair1, $pair2 = $result -replace '^@{|}$' -split '; '
$null, $aed = $pair1 -split '=', 2
$null, $aStatus = $pair2 -split '=', 2
-split
运算符的第二个参数确保第一个=
之后的所有内容都进入第二个元素,即使它包含另一个=
个字符。赋值左侧的$null
会丢弃拆分操作返回的数组的第一个元素(键名)。
演示:
PS C:\> $result = "@{AccountExpirationDate=1/23/2016 6:00:00 PM; userAccountControl=512}"
PS C:\> $result
@{AccountExpirationDate=1/23/2016 6:00:00 PM; userAccountControl=512}
PS C:\> $pair1, $pair2 = $result -replace '^@{|}$' -split '; '
PS C:\> $null, $aed = $pair1 -split '=', 2
PS C:\> $null, $aStatus = $pair2 -split '=', 2
PS C:\> $aed
1/23/2016 6:00:00 PM
PS C:\> $aStatus
512