正在将字符串输出解析为哈希表Powershell



非常感谢您花时间阅读本文。如果你能告诉我如何实现这一目标,我将不胜感激。

根据命令行输出的几个条件,构建一个PS脚本来撤销/释放几个许可证的想法

示例许可证状态可以通过下面的命令行获取

--------------------------------------------------------------------
Trust Flags       = FULLY TRUSTED
Fulfillment Type: TRIAL
Status: ENABLED
Fulfillment ID: LOCAL_TRIAL_FID_586
Entitlement ID: SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PCR8
Product ID: NAME=Tableau Desktop TS;VERSION=4.0
Suite ID: NONE
Expiration date: 23-oct-2020
Feature line(s):

INCREMENT TableauDesktop tableau 2021.1108 permanent 1 
VENDOR_STRING=EntitlementID=;EDITION=Professional;CAP=REG:STANDARD,WARN:14,NOGRACE;DC_STD=default;DC_CAP=;TRIALVER=2019.1;FulfillmentID=;ActivationID=;OEMNAME=;GRACE=;MAP_STD=default;MAP_CAP=;OFFLINE= 
ISSUER="Tableau Software" ISSUED=9-nov-2018 START=8-nov-2018 
TS_OK SIGN="042D 811B 5D78 81EA E6E7 28BD 607A F3D3 028E DC82 
E310 A6BC C1D5 0913 5CBC 18B5 8671 7C7D C0B7 3C46 D1E7 A16C 
6C84 3694 BB4C DB73 4B59 C419 D820 58E0"
--------------------------------------------------------------------
Trust Flags       = FULLY TRUSTED
Fulfillment Type: TRIAL
Status: ENABLED
Fulfillment ID: LOCAL_TRIAL_FID_590
Entitlement ID: SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PTR2
Product ID: NAME=Tableau Desktop TS;VERSION=4.0
Suite ID: NONE
Expiration date: 23-oct-2020
Feature line(s):

INCREMENT TableauDesktop tableau 2021.1108 permanent 1 
VENDOR_STRING=EntitlementID=;EDITION=Professional;CAP=REG:STANDARD,WARN:14,NOGRACE;DC_STD=default;DC_CAP=;TRIALVER=2019.1;FulfillmentID=;ActivationID=;OEMNAME=;GRACE=;MAP_STD=default;MAP_CAP=;OFFLINE= 
ISSUER="Tableau Software" ISSUED=9-nov-2018 START=8-nov-2018 
TS_OK SIGN="042D 811B 5D78 81EA E6E7 28BD 607A F3D3 028E DC82 
E310 A6BC C1D5 0913 5CBC 18B5 8671 7C7D C0B7 3C46 D1E7 A16C 
6C84 3694 BB4C DB73 4B59 C419 D820 58E0"
--------------------------------------------------------------------

我们需要将"Trust Flags""status""Entitlement ID"从中的两个条目解析到哈希表中,以便执行逻辑运算。

你的指示会很有帮助!!再次衷心感谢

您可以使用带有-Regex开关的switch语句来执行基于正则表达式的逐行处理:

# Initialize the (ordered) output hash table.
$hashTable = [ordered] @{}
# Process the input file line by line and populate the hash table.
switch -file input.txt -regex {
'^(Trust Flags|status|Entitlement ID):? +(?:= +)?(.*)' {
$hashTable[$Matches.1] = $Matches.2
}
}
# Output the resulting hash tabe.
$hashTable

以上收益率:

Name                           Value
----                           -----
Trust Flags                    FULLY TRUSTED
Status                         ENABLED
Entitlement ID                 SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PTR2

我首先要检查命令实用程序是否为您提供了控制输出的方法。许多命令行实用程序确实提供了用于创建结构化输出(如csv或xml(的选项。如果您确实仅限于文本,那么这是使用ConvertFrom-String的完美场景

现在,根据数据的变化程度,您可能需要调整";样品";模板中使用的数据。我发现关键是提供足够的训练数据,而不是太多。请参阅下面的示例。

首先创建一个模板。我不确定你可能面临的其他可能的价值观,但我确实改变了模板中的第二个例子,只是为了提供一个更宽的网络。您可以将这些值调整为实际可能的值,以获得更好的结果。

$template = @'
Trust Flags       = {TrustFlags*:FULLY TRUSTED}
Fulfillment Type: TRIAL
Status: {Status:ENABLED}
Fulfillment ID: LOCAL_TRIAL_FID_586
Entitlement ID: {EntitlementID:SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PCR8}
Trust Flags       = {TrustFlags*:not trusted}
Fulfillment Type: TRIAL
Status: {Status:Disabled}
Fulfillment ID: LOCAL_TRIAL_FID_590
Entitlement ID: {EntitlementID:AB_12345678ABCDEF}
'@

现在将模板应用于文本

$text = @'
--------------------------------------------------------------------
Trust Flags       = FULLY TRUSTED
Fulfillment Type: TRIAL
Status: ENABLED
Fulfillment ID: LOCAL_TRIAL_FID_586
Entitlement ID: SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PCR8
Product ID: NAME=Tableau Desktop TS;VERSION=4.0
Suite ID: NONE
Expiration date: 23-oct-2020
Feature line(s):

INCREMENT TableauDesktop tableau 2021.1108 permanent 1 
VENDOR_STRING=EntitlementID=;EDITION=Professional;CAP=REG:STANDARD,WARN:14,NOGRACE;DC_STD=default;DC_CAP=;TRIALVER=2019.1;FulfillmentID=;ActivationID=;OEMNAME=;GRACE=;MAP_STD=default;MAP_CAP=;OFFLINE= 
ISSUER="Tableau Software" ISSUED=9-nov-2018 START=8-nov-2018 
TS_OK SIGN="042D 811B 5D78 81EA E6E7 28BD 607A F3D3 028E DC82 
E310 A6BC C1D5 0913 5CBC 18B5 8671 7C7D C0B7 3C46 D1E7 A16C 
6C84 3694 BB4C DB73 4B59 C419 D820 58E0"
--------------------------------------------------------------------
Trust Flags       = FULLY TRUSTED
Fulfillment Type: TRIAL
Status: ENABLED
Fulfillment ID: LOCAL_TRIAL_FID_590
Entitlement ID: SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PTR2
Product ID: NAME=Tableau Desktop TS;VERSION=4.0
Suite ID: NONE
Expiration date: 23-oct-2020
Feature line(s):

INCREMENT TableauDesktop tableau 2021.1108 permanent 1 
VENDOR_STRING=EntitlementID=;EDITION=Professional;CAP=REG:STANDARD,WARN:14,NOGRACE;DC_STD=default;DC_CAP=;TRIALVER=2019.1;FulfillmentID=;ActivationID=;OEMNAME=;GRACE=;MAP_STD=default;MAP_CAP=;OFFLINE= 
ISSUER="Tableau Software" ISSUED=9-nov-2018 START=8-nov-2018 
TS_OK SIGN="042D 811B 5D78 81EA E6E7 28BD 607A F3D3 028E DC82 
E310 A6BC C1D5 0913 5CBC 18B5 8671 7C7D C0B7 3C46 D1E7 A16C 
6C84 3694 BB4C DB73 4B59 C419 D820 58E0"
--------------------------------------------------------------------
'@
$text | ConvertFrom-String -TemplateContent $template -OutVariable results
TrustFlags    Status  EntitlementID                     
----------    ------  -------------                     
FULLY TRUSTED ENABLED SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PCR8
FULLY TRUSTED ENABLED SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PTR2

在演示中,我使用了Out-Variable,这样我们就可以看到输出以及对变量的捕获。这显然可以改为仅$variable =$results变量是一个PSCustomObject,您可以像使用其他变量一样使用它。

$results | where trustflags -eq 'Fully Trusted'
TrustFlags    Status  EntitlementID                     
----------    ------  -------------                     
FULLY TRUSTED ENABLED SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PCR8
FULLY TRUSTED ENABLED SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PTR2
$results.entitlementid
SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PCR8
SC_LVJ1BYNH8ZF6H57OSCBZTFWPVR7PTR2

要对文件使用它,最好使用Get-Content -Raw,具体取决于这些文件的大小。

Get-Content $textfile -Raw | ConvertFrom-String -TemplateContent $template -OutVariable results

最新更新