试图让我的PowerShell函数中的第二个参数工作

我有一个函数,我正在从远程计算机的registry中取出DisplayName和UninstallStrings。 如果我只使用“$软件”参数,它适用于我的本地PC。 但是,如果我添加“$ compname”variables并尝试一个调用命令到达远程PC来做同样的事情,它会中断。 这是我到目前为止:

Function Get-Uninstallers { param( [parameter(mandatory=$true)][string]$compName, [parameter(mandatory=$true)][string]$software, $soft = ('"' + ("*" + $software + "*") + '"') ) Invoke-Command -ComputerName $compname { Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | ` Get-ItemProperty | Where-Object {$_.DisplayName -like $soft} | Select-Object DisplayName,UninstallString }} 

我已经尝试了$ softvariables的各种不同的组合,带/不带引号,单引号,没有*之一,没有两个。 我知道我做错了什么,但我无法想象出我的生活。 我尝试在命令行上将参数添加到参数,并将它们排除在外。

这里是我得到的输出样本,当我填写variables:

 PS C:\> Invoke-Command -ComputerName 61966 { Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | ` Get-ItemProperty | Where-Object {$_.DisplayName -like "*calabrio*"} | Select-Object DisplayName,UninstallString } DisplayName : Calabrio Screen Player Plug-in version 8.0.2.2004 UninstallString : "C:\WINDOWS\unins000.exe" PSComputerName : 61966 RunspaceId : cfdbbc09-42e6-4c1f-a2ba-0bedc623d73b DisplayName : Calabrio Analytic Services Client UninstallString : MsiExec.exe /I{4762419C-C004-46F8-AB0D-DACA7C05258F} PSComputerName : 61966 RunspaceId : cfdbbc09-42e6-4c1f-a2ba-0bedc623d73b DisplayName : Calabrio Monitoring and Recording Recording UninstallString : MsiExec.exe /X{5144778B-D71E-4FE5-8AEB-D5A2DAE6DABA} PSComputerName : 61966 RunspaceId : cfdbbc09-42e6-4c1f-a2ba-0bedc623d73b DisplayName : Calabrio Monitoring and Recording Services Service Release 0 Engineering Special 2 UninstallString : MsiExec.exe /X{FAEDCE7E-1A2B-4CCC-89D8-8DD28F51B05E} PSComputerName : 61966 RunspaceId : cfdbbc09-42e6-4c1f-a2ba-0bedc623d73b 

这里是我运行指定参数的函数的一个例子:

 PS C:\> Get-Uninstallers -compName 61966 -software calabrio DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : gmcr61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Oarpmany.exe" /removereleaseinpatch "{90140000-0011-0000-0000-0000000FF1CE}" "{71949C83-C5B4-43D2-9372-E3838A5E82E6}" "1033" "0" PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 DisplayName : UninstallString : PSComputerName : 61966 RunspaceId : 2df812e2-8693-483f-918c-ece84892c5c5 

这是所需的输出:

 PS C:\> Invoke-Command -ComputerName 61966 { $software = "*calabrio*" Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | ` Get-ItemProperty | Where-Object {$_.DisplayName -like $software} | Select-Object DisplayName,UninstallString | FT } DisplayName UninstallString ----------- --------------- Calabrio Screen Player Plug-in version 8.0.2.2004 "C:\WINDOWS\unins000.exe" Calabrio Analytic Services Client MsiExec.exe /I{4762419C-C004-46F8-AB0D-DACA7C05258F} Calabrio Monitoring and Recording Recording MsiExec.exe /X{5144778B-D71E-4FE5-8AEB-D5A2DAE6DABA} Calabrio Monitoring and Recording Services Service Release 0 Engineering Special 2 MsiExec.exe /X{FAEDCE7E-1A2B-4CCC-89D8-8DD28F51B05E} 

任何帮助,将不胜感激。 谢谢。

我尝试了你的function,我也得到了一个空的结果。 问题是你如何处理你的软件参数:你不必把它转换成variables$soft ,你可以在Where-Object子句中直接使用$software -Variable和astersik。 只要使用:

 Get-ItemProperty | Where-Object {$_.DisplayName -like "*$software*"} | Select-Object DisplayName,UninstallString 

这在我的系统上工作,通配符也正常工作。

编辑:这是在我的机器上工作的完整function – 您将variables$software转换为$soft被禁用,因为您不需要它:

 Function Get-Uninstallers { param( [parameter(mandatory=$true)][string]$compName, [parameter(mandatory=$true)][string]$software #$soft = ('"' + ("*" + $software + "*") + '"') ) Invoke-Command -ComputerName $compname { Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | ` Get-ItemProperty | Where-Object {$_.DisplayName -like "*$using:software*"} | Select-Object DisplayName,UninstallString } } 

当我使用的function,例如

 Get-Uninstallers -compname my-pc -software VMWare 

我得到了所有显示名称包含“ VMware ”的软件列表,没有别的。