Как получить несколько шаблонов с PowerShell - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть следующий вывод:


PS C:\Users\zorg> Get-Acl HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv | Format-List * 


PSPath                  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
PSParentPath            : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
PSChildName             : wuauserv
PSDrive                 : HKLM
PSProvider              : Microsoft.PowerShell.Core\Registry
CentralAccessPolicyId   : 
CentralAccessPolicyName : 
Path                    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
Owner                   : AUTORITE NT\Système
Group                   : AUTORITE NT\Système
---snipped---
AccessToString          : DESKTOP-MAU75IM\zorg Allow  FullControl
                          BUILTIN\Utilisateurs Allow  ReadKey
                          BUILTIN\Utilisateurs Allow  -2147483648
                          BUILTIN\Administrateurs Allow  FullControl
                          BUILTIN\Administrateurs Allow  268435456
                          AUTORITE NT\Système Allow  FullControl
                          AUTORITE NT\Système Allow  268435456
                          CREATEUR PROPRIETAIRE Allow  268435456
                          AUTORITÉ DE PACKAGE D’APPLICATION\TOUS LES PACKAGES D’APPLICATION Allow  ReadKey
---snipped---
AccessRightType         : System.Security.AccessControl.RegistryRights
AccessRuleType          : System.Security.AccessControl.RegistryAccessRule
AuditRuleType           : System.Security.AccessControl.RegistryAuditRule
AreAccessRulesProtected : False
AreAuditRulesProtected  : False
AreAccessRulesCanonical : True
AreAuditRulesCanonical  : True

И я хотел бы вывести только объект PSPath и объект AccessToString, где последний равен zorg.

Как я могу это сделать? (предпочтительный вариант)

1 Ответ

0 голосов
/ 26 апреля 2020

Никогда не используйте Format- * до самого последнего момента. Убедитесь, что вы знаете, что у вас есть все ваши результаты, а затем выберите разумный стиль форматирования, и он может вообще не быть Format- *. Это может быть таблица ha sh, пользовательский объект, вывод файла и т. Д. c.

PowerShell 101, а также примеры, которые легко найти в Интернете и в файлах справки. Просто выберите нужные свойства, а не все. Ну, если вы не хотите, чтобы все они

Ниже приведены лишь некоторые способы / идеи для обработки этого варианта использования, и есть несколько других способов, которые могут быть более элегантными.

Тот факт, что вы используется термин grep, означающий, что вы пришли из Linux мира (при условии, конечно, что это хорошо, многие из нас также), и Linux испускает строки, тогда как PowerShell испускает объекты, потому что это объектно-ориентированный язык на основе. Net.

Clear-Host
Get-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv' | 
Select-Object -Property PSPath, AccessToString
<#
# Results

PSPath                                                                                            AccessToString                                                    
------                                                                                            --------------                                                    
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv BUILTIN\Users Allow  ReadKey... 
#>

Clear-Host
Get-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv' | 
Select-Object -Property PSPath, AccessToString | 
Format-List
<#
# Results

PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
AccessToString : BUILTIN\Users Allow  ReadKey
                 BUILTIN\Administrators Allow  FullControl
                 NT AUTHORITY\SYSTEM Allow  FullControl
                 CREATOR OWNER Allow  FullControl
                 APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES Allow  ReadKey
                 S-1-15-3-1024-1...Allow  ReadKey
#>

# Grab the property data with a simple select and calulated property, parsing the AccessToString
Clear-Host
Get-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv' | 
Select-Object -Property PSPath, @{
    Name       = 'AccessToString'
    Expression = {($PSItem.AccessToString -split"`n")[0]}} | 
Format-List
<#
# Results

PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
AccessToString : BUILTIN\Users Allow  ReadKey
#>

# Extract specific strings using RegEx
Clear-Host
Get-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv' | 
Select-Object -Property PSPath, @{
    Name       = 'AccesstoString'
    Expression = {[regex]::Matches(($PSItem.AccessToString),'BUILTIN\\Users.*')}
} | 
Format-List
<#
# Results

PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
AccesstoString : BUILTIN\Users Allow  ReadKey
#>

Clear-Host
Get-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv' | 
Select-Object -Property PSPath, @{
    Name       = 'AccesstoString'
    Expression = {[regex]::Matches(($PSItem.AccessToString),'^B.*Users.*')}
} | 
Format-List
<#
# Results

PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
AccesstoString : BUILTIN\Users Allow  ReadKey
#>

Clear-Host
[regex]::Matches($(Out-String -InputObject $(Get-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv' | 
Select-Object -Property '*') -Width 100),'PSPath.*|AccessToString.*').Value
<#
# Resutlts

PSPath                  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr
AccessToString          : BUILTIN\Users Allow  ReadKey
#>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...