相关疑难解决方法(0)

如何在PowerShell中按名称和值过滤注册表项下的名称/值对?

我试图了解在PowerShell中使用的习语.

鉴于此脚本:

$path = 'hkcu:\Software\Microsoft\Windows\CurrentVersion\Extensions'
$key = Get-Item $path
$key
Run Code Online (Sandbox Code Playgroud)

我得到了这个问题底部的输出.

我想得到属性的输出(名称/值对下$key)我可以在名称和值上进行过滤.

例如,过滤列出所有具有以下内容的扩展:

  • 名字就像 xls*
  • 或价值 *\MSACCESS.EXE

或者排除过滤器:排除所有名称 doc*

冷杉第一个过滤器,我想要一个像这样的结果:

Name                           Value                                                                                                                                                       
----                           --------                                                                                                                                                       
xlsx                           C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
xls                            C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
mdb                            C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
mda                            C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
Run Code Online (Sandbox Code Playgroud)

这是脚本的原始输出:

Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
Name                           Property                                                                                                                                                       
----                           --------                                                                                                                                                       
Extensions                     rtf  : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.rtf                                                                                                         
                               dot  : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dot                                                                                                         
                               dotm : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dotm                                                                                                        
                               dotx : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dotx                                                                                                        
                               docm : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.docm                                                                                                        
                               docx : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.docx                                                                                                        
                               doc  : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.doc                                                                                                         
                               xlsx : C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
                               xls  : C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE                                                                                                                 
                               mdb  : C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE                                                                                                              
                               mda …
Run Code Online (Sandbox Code Playgroud)

registry powershell powershell-3.0

4
推荐指数
2
解决办法
3397
查看次数

Powershell数组的ForEach不返回System.array?

我注意到,当ForEach在数组对象上运行并将输出捕获到新变量时,新变量不是 System.array 类型:

PS D:\Playground> $Arr = 1, 2, 3
PS D:\Playground> $Arr2 = $Arr.ForEach({$_})
PS D:\Playground> $Arr2.Gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Collection`1                             System.Object

Run Code Online (Sandbox Code Playgroud)

相反,它是 类型Collection'1

这是什么类型?它相当于数组吗?

顺便说一句,这与以下内容不同ForEach-Object

PS D:\Playground> $Arr3 = $($Arr | ForEach-Object { $_ })
PS D:\Playground> $Arr3.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
Run Code Online (Sandbox Code Playgroud)

powershell

2
推荐指数
1
解决办法
812
查看次数

Powershell:始终生成空文件(比较对象的输出)

此问题最流行的答案涉及以下 Windows powershell 代码(已编辑以修复错误):

$file1 = Get-Content C:\temp\file1.txt  
$file2 = Get-Content C:\temp\file2.txt   
$Diff = Compare-Object $File1 $File2  
$LeftSide = ($Diff | Where-Object {$_.SideIndicator -eq '<='}).InputObject  
$LeftSide | Set-Content C:\temp\file3.txt
Run Code Online (Sandbox Code Playgroud)

我总是得到一个零字节文件作为输出,即使我删除了 $Diff 行。

为什么输出文件总是为空,如何修复?

windows powershell compare file member-enumeration

1
推荐指数
1
解决办法
948
查看次数