powershell - 如何在 PowerShell 的远程连接中正确地将管道值映射到 ForEach-Object
问题描述
我有下一个代码:
$Dom = Get-ADDomain
$DomIs = $dom.DNsRoot
$GetComp = Get-ADComputer -Filter 'enabled -eq "true"'
$CertGridComp = ($Computer | ForEach-Object {
Invoke-Command -Cn $GetComp.Name -ScriptBlock {
Get-ChildItem -Path Cert:LocalMachine\* -Recurse |
Select-Object PSComputerName, NotAfter, Issuer, NotBefore, Subject,PSPath
}
)| Out-GridView -Title "Select Certificates to Delete" -PassThru
$Compdel | ForEach-Object {
Invoke-Command -Cn $CertGridComp.PSComputerName {Remove-Item -path $Using:CertGridComp.PSPath -whatif}
}
我需要从 OGV 传递映射值选择以执行正确删除。选择后使用上面的代码,我有一个问题,每个
CertGridComp.PSPath
值被传递给每个选择,从而使输出相乘,但也会给出错误,因为并非每个证书路径都存在于所选计算机上。如何格式化 ForEach-Object 以调用所选计算机的命令以仅使用其自己的证书路径,而不是选择的其他路径。
谢谢。
解决方案
不知道从哪里来$Compdel
。也就是说,我会做一些假设。
- 您最终可能会在每台机器上获得多个证书
- 您可能不想在每台机器上调用多个 Invoke-Command
$CertGridComp
已经包含您需要的所有信息。
基于这些,我会将您更改Invoke-Command
为此。
$CertGridComp | Group-Object -Property pscomputername | foreach {
Invoke-Command -cn $_.name -ScriptBlock {$using:_.group.pspath | foreach {Remove-Item -path $_ -WhatIf}}
}
首先,我们按 pscomputername 对每个条目进行分组。然后我们为每个组的名称调用一个invoke-command 调用,即PC 名称。接下来我们仍然使用$using
但反对自动变量$_
,这使它看起来有点奇怪。我们为每个要删除的证书提供了每个路径(即使它只是一个)。这应该可以完成您想要的。
编辑:我也看到了 Andrew 所指的内容$Computer
——奇怪的是,该命令有效,但那部分是不必要的。这基本上是实际运行的。
$CertGridComp = Invoke-Command -Cn $GetComp.Name -ScriptBlock {
Get-ChildItem -Path Cert:LocalMachine\* -Recurse
} | Select-Object PSComputerName, NotAfter, Issuer, NotBefore, Subject,PSPath |
Out-GridView -Title "Select Certificates to Delete" -PassThru
重新格式化,整个脚本可能看起来像这样
$DomIs = (Get-ADDomain).DNsRoot
$GetComp = Get-ADComputer -Filter "enabled -eq 'true'"
Invoke-Command -Cn $GetComp.Name -ScriptBlock {
Get-ChildItem -Path Cert:LocalMachine\* -Recurse
} | Select-Object PSComputerName, NotAfter, Issuer, NotBefore, Subject,PSPath |
Out-GridView -Title "Select Certificates to Delete" -PassThru -OutVariable CertGridComp
$CertGridComp | Group-Object -Property pscomputername | foreach {
Invoke-Command -cn $_.name -ScriptBlock {$using:_.group.pspath | foreach {Remove-Item -path $_ -WhatIf}}
}
推荐阅读
- vim - 使用 vim 选择 xml 块的最佳方法是什么?
- node.js - JWT 和 CSRF 令牌工作流程
- google-cloud-bigtable - 是否可以将 bigtable 请求写入特定区域?
- java - 我的 Spring Boot 微服务项目的 POM 不会停止显示父错误
- c++ - QVideoWidget 不显示帧
- wordpress - 谷歌索引显示 Wordpress 默认 favicon 而不是 set favicon
- django - 如何创建具有包含来自另一个模型中的字段的唯一值的字段的模型?
- java - 同步处理期间未应用 java 变量更改
- node.js - 我们如何在 Redis 中存储 JSON 对象
- css - 将 :before 内容添加到元素子项