标签: select-object

如何从Select-String中获取捕获的组?

我正在尝试使用Powershell(版本4)从Windows上的一组文件中提取文本:

PS > Select-String -AllMatches -Pattern <mypattern-with(capture)> -Path file.jsp | Format-Table
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.这给出了一组很好的MatchInfo对象:

IgnoreCase                    LineNumber Line                          Filename                      Pattern                       Matches
----------                    ---------- ----                          --------                      -------                       -------
    True                            30   ...                           file.jsp                      ...                           {...}
Run Code Online (Sandbox Code Playgroud)

接下来,我看到捕获是在匹配成员中,所以我把它们拿出来:

PS > Select-String -AllMatches -Pattern <mypattern-with(capture)> -Path file.jsp | ForEach-Object -MemberName Matches | Format-Table
Run Code Online (Sandbox Code Playgroud)

这使:

Groups        Success Captures                 Index     Length Value
------        ------- --------                 -----     ------ -----
{...}         True    {...}                    49        47     ...
Run Code Online (Sandbox Code Playgroud)

或作为列表| Format-List:

Groups   : {matched text, captured group}
Success  : True
Captures …
Run Code Online (Sandbox Code Playgroud)

regex powershell select-string select-object

46
推荐指数
4
解决办法
3万
查看次数

powershell 选择对象属性和扩展属性

尝试执行选择对象,但我似乎无法从键值列表属性返回属性和值。我希望从此参数属性返回 RunStart、Message 和“tableName”3 个属性。

我对此感到太多了:

|Select-Object -Property Parameters,RunStart,Message

Parameters                                    RunStart              Message
----------                                    --------              -------
{[tableName, AHROR012], [schemaName, dbo]...} 11/14/2019 5:39:06 PM Operation on target failed
Run Code Online (Sandbox Code Playgroud)

但当我这样做时,我没有收到 RunStart 或消息:

|Select-Object -ExpandProperty Parameters -Property tableName,RunStart,Message

Key                 Value
---                 -----
tableName           AHROR012
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能得到:

Parameters.tableName                         RunStart              Message
----------                                    --------              -------
AHROR012                                      11/14/2019 5:39:06 PM Operation on target failed
Run Code Online (Sandbox Code Playgroud)

谢谢!!!

powershell select-object

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

如何编写对象的单个属性的值?

这是我当前的脚本的样子:

$cpu = Get-WmiObject win32_processor | select LoadPercentage
logwrite $cpu #this fuction writes $cpu into a .txt file
Run Code Online (Sandbox Code Playgroud)

该文件的输出为:

@{LoadPercentage=4}
Run Code Online (Sandbox Code Playgroud)

我希望它只是数字,以便我进行计算。

powershell logfile select-object get-wmiobject

5
推荐指数
2
解决办法
1394
查看次数

PowerShell 选择对象:使用 -Unique 与第一个/最后一个/跳过/索引

我只是好奇我是否缺少任何文档,或者是否有不同/更好的方法来做到这一点,从而不需要文档。也许我是唯一一个尝试从一组数据中Select-Object选择唯一实例的人。-First X

根据下面的测试,看起来Select-Object-Unique开关和某种类型的限制器(FirstLastSkipIndex等)一起使用本质上会导致在删除重复项之前应用限制器。这在概念上对我来说没有意义,而且似乎也没有记录在案。

我对这个糟糕的例子表示歉意,但考虑一个包含 20 个项目的数组,每个项目出现两次:

PS > $array = @() ; 1..10 | % { $array += $_ ; $array += $_ }
PS > $array -Join ','
1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10  ##Displaying the array on a single comma separated line
Run Code Online (Sandbox Code Playgroud)

假设有人给了你$array,但你最多只能处理 5 个对象的输入。过滤给你的内容,你可能会想使用Select-Object. 一开始你最终得到了 5 个对象,但是有重复的对象,所以你很快就想了想,只需添加开关-Unique,然后你就会意识到输出仍然不太正确。

PS > ($array | Select-Object -First 5) -Join ','
1,1,2,2,3  ##5 objects as expected, …
Run Code Online (Sandbox Code Playgroud)

powershell unique select-object

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

选择不存在的属性时没有错误

我希望PowerShell在尝试选择不存在的属性时抛出错误,但是我得到了空列作为输出。例:

$ErrorActionPreference=[System.Management.Automation.ActionPreference]::Stop;
Set-StrictMode -Version 'Latest'
Get-Process *ex* | Select-Object Id,ProcessName,xxx

   Id ProcessName   xxx
   -- -----------   ---
 9084 explorer
11404 procexp
Run Code Online (Sandbox Code Playgroud)

我编写了一个脚本,该脚本通过导入了多个文本文件Import-Csv,但是这些文件中的标题可能会更改,最后我将空列加载到系统中。

编辑:这就是我检查标题是否匹配的方式:

$csv = Import-Csv -Delimiter ';' -Path $file.FullName 
$FileHeaders = @(($csv | Get-Member -MemberType NoteProperty).Name) 
if (Compare-Object $ProperHeaders $FileHeaders) {'err'} else {'ok'}
Run Code Online (Sandbox Code Playgroud)

我知道这就是PowerShell的工作方式,但是Set-StrictMode正如@Matt所提到的,文档确实对我有点误导。我只希望Select-Object有某种“ -NoNewImplicitProps”或“ -ReadOnlyPipeline”开关可以为我完成工作:)。感谢您的回答。

powershell powershell-4.0 select-object

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

PS 脚本正在导出一个空的 CSV

我有很多时间试图理解为什么这个脚本没有按预期工作。这是一个简单的脚本,我试图在其中导入 CSV,选择我想要的几列,然后导出 CSV 并复制自身。(基本上我们已经归档了数据,由于内存大小限制,我只需要从另一个项目中提取几列数据)。这个脚本非常简单,它显然与它不起作用时造成的挫败感成反比关系......现在最终结果是我最终得到一个空的 csv 而不是一个只包含我选择的列的 csv与选择对象。

$RootPath = "D:\SomeFolder"

$csvFilePaths = Get-ChildItem $RootPath -Recurse -Include *.csv | 
    ForEach-Object{
        Import-CSV $_ |
        Select-Object Test_Name, Test_DataName, Device_Model, Device_FW, Data_Avg_ms, Data_StdDev | 
        Export-Csv $_.FullName -NoType -Force
}
Run Code Online (Sandbox Code Playgroud)

csv powershell select-object export-csv

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

具有null属性的select-object -expandproperty

我有一组对象,其中包含id,username,email,current_sign_in_at,identityities等属性.其中Identities属性是具有两个属性的对象数组.这将是对象的json表示:

{
        "id": 45,
        "name": "Emilio Roche",
        "username": "EROCHE",
        "state": "active",
        "identities": [
            {
                "provider": "ldapmain",
                "extern_uid": "cn=roche\\, emilio,ou=xxxxxxxxxx"
            }    
          ]
    }
Run Code Online (Sandbox Code Playgroud)

但是列表中的一些元素没有identityities属性.所以,当我这样做时:

Get-Collection | Select-Object id, username  -ExpandProperty identities
Run Code Online (Sandbox Code Playgroud)

我只获得具有identities属性的元素.我需要所有实体,有或没有身份属性

powershell select-object

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

在PowerShell中选择带变量的属性或参数

使用此代码,我得到了所需的结果:

Get-Service | select Name,Status
Run Code Online (Sandbox Code Playgroud)

但是下面的代码不起作用,你知道为什么吗?我希望用户选择自己的属性选择.我将属性存储在如下所示的变量中.但它不会起作用:

$param = "Name,Status"
Get-Service | select $param
Run Code Online (Sandbox Code Playgroud)

powershell select-object

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

Select-Object -First 影响管道中的先前 cmdlet

Strongly Encouraged Development Guidelinescmdlet 应该为管道中间实现的 PowerShell ,但我怀疑-Last对于Select-Object. 仅仅是因为您无法预先确定最后一个条目。换句话说:您需要等待输入流完成,直到您定义最后一个条目。
为了证明这一点,我写了一个小脚本:

$Data = 1..5 | ForEach-Object {[pscustomobject]@{Index = "$_"}}

$Data | ForEach-Object { Write-Host 'Before' $_.Index; $_ } |
Select-Object -Last 5 | ForEach-Object { Write-Host 'After' $_.Index }
Run Code Online (Sandbox Code Playgroud)

并将其与Select-Object *

$Data | ForEach-Object { Write-Host 'Before' $_.Index; $_ } |
Select-Object * | ForEach-Object { Write-Host 'After' $_.Index }
Run Code Online (Sandbox Code Playgroud)

结果(右:Select-Object -Last 5,左:)Select-Object *

-Last 5  *
-------  - …
Run Code Online (Sandbox Code Playgroud)

powershell pipeline select-object

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