我很困惑 $_ 变量在管道的某些上下文中是如何工作的。在此备份 Bitlocker 密钥的示例中:
Get-BitlockerVolume | % {$_.KeyProtector | ? RecoveryPassword | Backup-BitlockerKeyProtector -MountPoint $_.MountPoint}
我是这样读英文的:
但是,MountPoint 是 BitLockerVolume 对象的一个字段,如下所示:
PS C:\Windows\system32> Get-BitLockerVolume | Get-Member | Where-Object {$_.Name -eq "MountPoint"}
TypeName: Microsoft.BitLocker.Structures.BitLockerVolume
Name MemberType Definition
---- ---------- ----------
MountPoint Property string MountPoint {get;}
那么,对于包裹在括号 { } 中的整个块,通过任何数量的管道,$_ 变量是否总是相同的?例如,我们正在向前输送的对象正在发生变化。它不再是 BitLockerVolume 对象,而是 KeyProtector 对象。那么在这种情况下,$_ 是否总是引用 BitLockerVolume 对象,还是会根据管道中通过管道进一步传输的不同类型的对象在管道中进一步更改?
所以 $_ 是来自当前管道的信息。
1,2 | %{
$_
}
回复
1
2
尽管
1,2 | %{
"a","b" | %{
$_
}
}
回复
a
b
a
b
我们可以在第一个中看到 %_ 的输出来自给出的最后一个信息,即1,2
. 虽然下一个示例仍然循环 1,2 但输出来自内部的管道a,b
。
有办法通过将第一个管道信息存储到第二个管道中的变量来解决这个问题
1,2 | %{
$Num = $_
"a","b" | %{
$Num
}
}
哪种情况下输出是
1
1
2
2
在您给出的示例中,让我们看一下它的格式
Get-BitlockerVolume | % {
$_.KeyProtector | ? RecoveryPassword | Backup-BitlockerKeyProtector -MountPoint $_.MountPoint
}
你有 2 个不同的管道。首先是获得“BitlockerVolumevolume”。第二个开始是你发送BitlockerVolume's KeyProtector
.
就像在说
对于每个 Bitlocker 卷,获取 KeyProtector。
对于每个 KeyProtector,请为我获取具有成员 RecoveryPassword 的密钥保护器
Foreach KeyProtector with member RecoveryPassword, Backup Bitlocker Key Protector Using KeyProtector's Mountpoints
因此,在最后一个说明中,我还假设您给出的示例不起作用。你可能正在寻找的是这个......
Get-BitlockerVolume | % {
$MountPoint = $_.MountPoint
$_.KeyProtector | ? RecoveryPassword | Backup-BitlockerKeyProtector -MountPoint $MountPoint -KeyProtectorId $_.KeyProtectorId
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句