作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为Get-InstalledApps
的函数,该函数可连接到所有带有-computers
参数列出的计算机,该计算机通过管道接受输入。
将计算机名称传递给函数时,存在两个问题:
(a)我有一个可以传递给它的CSV文件,但是它解析这样的值:@{computername=HOSTNAME}
而不是HOSTNAME
。
(b)当改为从Get-ADComputer -Filter *
进行管道传输时,它只是获取最近传递的计算机名称。
这是我的功能:
function Get-InstalledApps {
Param (
[CmdletBinding()]
[Parameter(ValueFromPipeline=$true)]
[Alias('name')]
[string[]]$computers = $env:COMPUTERNAME
)
foreach($computer in $computers){
write-verbose -verbose -message "`nStarting scan on $computer"
Invoke-Command -Computername $computer -ErrorAction SilentlyContinue -ErrorVariable InvokeError -Scriptblock {
$installPaths = @('HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall','HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall')
Get-ChildItem -Path $installPaths | Get-ItemProperty | Sort-Object -Property DisplayName | Select-Object -Property DisplayName, DisplayVersion, Publisher, UninstallString, Version
}
if ($invokeerror){
Write-Warning "Could not communicate with $computer"
}
}
}
最佳答案
回复(a):
如果您的函数看到的是@{computername=HOSTNAME}
而不是HOSTNAME
,则表示您正在执行以下操作:
Import-Csv ... | Select-Object ComputerName | Get-InstalledApps
Import-Csv ... | Select-Object -ExpandProperty ComputerName | Get-InstalledApps
-ExpandProperty
开关,这是从输入中提取单个属性值所必需的;没有它,您将获得具有该属性的对象-有关更多信息,请参见
this answer。
process { ... }
块:
function Get-InstalledApps {
Param (
[CmdletBinding()]
[Parameter(ValueFromPipeline=$true)]
[Alias('name')]
[string[]]$computers = $env:COMPUTERNAME
)
process { # This ensures that the following code is called for each input object.
foreach ($computer in $computers){
# ...
}
}
}
Get-Help about_Functions_Advanced
。
... | Get-InstalledApps
)而不是参数(
Get-InstalledApps -Computers ...
)来接收计算机名称列表,则可以将
-Computers
参数声明为
[string]
(而不是数组),从而避免了在
foreach
块内需要
process { ... }
循环。
关于powershell - 解析导入的csv并迭代管道值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54445010/
我是一名优秀的程序员,十分优秀!