如何使用 powershell 迭代特定键的文本文件并保存在变量中?
How to iterate a text file for a specific key and save in variable using powershell?
我正在尝试创建一个脚本,该脚本将循环遍历文本文件 <--(步骤 3.1)并查找特定键并将值保存到变量中。现在我在命令中使用该变量来生成输出文件 < --(第 4 步)。我现在正在使用代码。
代码:
# 1- Connect to Azure Account
$username = "abc@xyz.com"
$pass = ConvertTo-SecureString "abc123" -AsPlainText -Force
$cred = New-Object PSCredential($username,$pass)
#Connect-AzureRmAccount -Credential $cred | out-null
Connect-AzAccount -Credential $cred | out-null
# 2 - Input Area
$subscriptionName = 'Data Analytics'
$resourceGroupName = 'DataLake-Gen2'
$dataFactoryName = 'dna-production-gen2'
$runStartDateTimeUTC = '2020-09-12T06:40:00Z'
# 3 - (All Triggers Information)
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path D:\Powershell\TriggerInfo.txt -append
Get-AzDataFactoryV2Trigger -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName
Stop-Transcript
# 3.1 (Get the content in a variable)
Get-Content "D:\Powershell\TriggerInfo.txt" | ForEach-Object {
$trg_name = $_.TriggerName
} $trg_name
# 4 - (Write the output to a text file, The Get-AzDataFactoryV2TriggerRun command returns detailed information about trigger runs for the specified trigger
# in the given timeframe.)
foreach ($trg in $trg_name) {
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path D:\Powershell\output.txt -append
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -TriggerName $trg -TriggerRunStartedAfter "2020-09-01" -TriggerRunStartedBefore "2020-09-17"
Stop-Transcript
"$trg = " + $trg.length
}
TriggerInfo.txt:
TriggerName : TRG_CM_TBLEnhanced_prod
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_tblEnhanced_QA
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CustCaseData
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_RP_Dashboard_TAE
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
任何帮助将不胜感激?谢谢
更新代码
# 3.1 (Get the content in a variable)
# Get-Content "D:\Powershell\TriggerInfo.txt" | ForEach-Object {
# $trg_name = $_.TriggerName
# } $trg_name
# $trg = (Get-AzDataFactoryV2Trigger -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName).TriggerName
$log = Get-Content -Path 'D:\Powershell\TriggerInfo.txt' -Raw
$result = ($log -split '(\r?\n){2,}' | Where-Object {$_ -match '\S'}) | ForEach-Object {
[PsCustomObject](($_ -split 'TriggeredPipelines')[0] -replace ' : ', '=' | ConvertFrom-StringData) |
Select-Object 'TriggerName'
}
# output on screen
$result | Format-Table -AutoSize
# write to CSV file
$result | Export-Csv -Path 'D:\Powershell\TriggerInforesult.csv' -Encoding UTF8 -NoTypeInformation -Force
$trg_name = (Import-Csv -Path 'D:\Powershell\TriggerInforesult.csv').TriggerName
# 4 - (Write the output to a text file, The Get-AzDataFactoryV2TriggerRun command returns detailed information about trigger runs for the specified trigger
# in the given timeframe.)
foreach ($trigger in $trg_name) {
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path D:\Powershell\output.txt -append
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -TriggerName $trigger -TriggerRunStartedAfter "2020-09-01" -TriggerRunStartedBefore "2020-09-17"
Stop-Transcript
"$trigger = " + $trigger.length
}
****Recent Update****
TriggerName : TRG_CM_TBLEnhanced_prod
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_tblEnhanced_QA
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CustCaseData
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_RP_Dashboard_TAE
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : GMB_Trigger
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.BlobEventsTrigger
RuntimeState : Started
TriggerName : TRG_RP_Optimizely_Import
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_USBusinessData_Monthly
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_Generic_CSV_To_DW
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Stopped
TriggerName : TRG_CM_Dimension_Unit
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_PricingQuoteApproval
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
Transcript stopped, output file is D:\Powershell\new\TriggerInfo.txt
ConvertFrom-StringData : Data line '**********************' is not in 'name=value' format.
At line:36 char:37
+ $data = $_ -replace ':', '=' | ConvertFrom-StringData
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [ConvertFrom-StringData], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ConvertFromStringDataCommand
Get-AzDataFactoryV2TriggerRun : Cannot validate argument on parameter 'DataFactoryName'. The argument is null or empty. Provide an argument that is not null or empty, and then try the
command again.
At line:47 char:34
+ Get-AzDataFactoryV2TriggerRun @splat
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-AzDataFactoryV2TriggerRun], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.DataFactoryV2.GetAzureDataFactoryTriggerRunCommand
ConvertFrom-StringData : Data line '**********************' is not in 'name=value' format.
At line:36 char:37
+ $data = $_ -replace ':', '=' | ConvertFrom-StringData
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [ConvertFrom-StringData], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ConvertFromStringDataCommand
TriggerInfo.txt
Windows PowerShell 脚本开始
开始时间:20201017093947
用户名:XXXXXX\XXXXXX
以用户身份运行:XXXXXX\XXXXXX
配置名称:
机器:INNOPHLTXETR138(Microsoft Windows NT 10.0.17134.0)
主机应用程序:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
进程号:20340
P版本:5.1.17134.858
PS版:桌面
PS兼容版本:1.0、2.0、3.0、4.0、5.0、5.1.17134.858
构建版本:10.0.17134.858
CLR版本:4.0.30319.42000
WSManStack 版本:3.0
PSRemotingProtocol版本:2.3
序列化版本:1.1.0.1
转录开始,输出文件为D:\Powershell\new\TriggerInfo.txt
TriggerName : TRG_CM_TBLEnhanced_prod
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_tblEnhanced_QA
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CustCaseData
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_RP_Dashboard_TAE
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : GMB_Trigger
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.BlobEventsTrigger
RuntimeState : Started
TriggerName : TRG_RP_Optimizely_Import
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_USBusinessData_Monthly
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_Generic_CSV_To_DW
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Stopped
TriggerName : TRG_CM_Dimension_Unit
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_PricingQuoteApproval
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
**********************
Windows PowerShell transcript end
End time: 20201017093951
**********************
如评论所述,Get-Content
将文件读取为字符串数组。如果您想使用问题中给出的示例文本文件,则需要将其解析为 objects 数组,以便 select 属性 或属性你想过滤掉。
但是,在您的 中,您已经完成了艰苦的工作,并且拥有一个包含所有您想要的属性的结构化 CSV 文件,所以我建议您使用它作为输入。
代码可以很简单:
$trg_name = (Import-Csv -Path 'TheResultsFileFromEarlierQuestion.CSV').TriggerName
并用它来将 $trigger
数组保存到文件中,或者用它来迭代内容:
$trg_name | ForEach-Object {
# using splatting here for prettier code
$splat = @{
ResourceGroupName = $resourceGroupName
DataFactoryName = $dataFactoryName
TriggerName = $_
TriggerRunStartedAfter = "2020-09-01"
TriggerRunStartedBefore = "2020-09-17"
}
Get-AzDataFactoryV2TriggerRun @splat
} | Export-Csv -Path 'PathToTheOutputFile.csv' -Encoding UTF8 -NoTypeInformation
P.S。如果 $resourceGroupName
和 $dataFactoryName
也应该来自输入 CSV 文件,那么您根本不需要 $trg_name
并且可以简单地做:
Import-Csv -Path 'TheResultsFileFromEarlierQuestion.CSV' | ForEach-Object {
$splat = @{
ResourceGroupName = $_.ResourceGroupName
DataFactoryName = $_.DataFactoryName
TriggerName = $_.TriggerName
TriggerRunStartedAfter = "2020-09-01"
TriggerRunStartedBefore = "2020-09-17"
}
Get-AzDataFactoryV2TriggerRun @splat
} | Export-Csv -Path 'PathToTheOutputFile.csv' -Encoding UTF8 -NoTypeInformation
这就是第 3.1 步和第 4 步的完整代码
编辑
根据您的意见,我了解到您不能使用您之前为此创建的 csv 文件,并且您被困在向我们展示的输入文本文件中。
这也不是很难用:
# split the text in 'trigger' text blocks on the empty line
$triggers = ((Get-Content "D:\Powershell\TriggerInfo.txt" -Raw) -split '\*+')[0] -split '(\r?\n){2,}'
# loop through these blocks (skip any possible empty textblock)
$triggers | Where-Object {$_ -match '\S'} | ForEach-Object {
# and parse the data into Hashtables
$data = $_ -replace ':', '=' | ConvertFrom-StringData
# if you have values containing a colon (:) character, this is safer:
# $data = ($_ -split ':', 2) -join '=' | ConvertFrom-StringData
$splat = @{
ResourceGroupName = $data.ResourceGroupName
DataFactoryName = $data.DataFactoryName
TriggerName = $data.TriggerName
TriggerRunStartedAfter = "2020-10-15"
TriggerRunStartedBefore = "2020-10-17"
}
Get-AzDataFactoryV2TriggerRun @splat
} | Export-Csv -Path 'D:\Powershell\new\Output.csv' -Encoding UTF8 -NoTypeInformation
我正在尝试创建一个脚本,该脚本将循环遍历文本文件 <--(步骤 3.1)并查找特定键并将值保存到变量中。现在我在命令中使用该变量来生成输出文件 < --(第 4 步)。我现在正在使用代码。
代码:
# 1- Connect to Azure Account
$username = "abc@xyz.com"
$pass = ConvertTo-SecureString "abc123" -AsPlainText -Force
$cred = New-Object PSCredential($username,$pass)
#Connect-AzureRmAccount -Credential $cred | out-null
Connect-AzAccount -Credential $cred | out-null
# 2 - Input Area
$subscriptionName = 'Data Analytics'
$resourceGroupName = 'DataLake-Gen2'
$dataFactoryName = 'dna-production-gen2'
$runStartDateTimeUTC = '2020-09-12T06:40:00Z'
# 3 - (All Triggers Information)
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path D:\Powershell\TriggerInfo.txt -append
Get-AzDataFactoryV2Trigger -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName
Stop-Transcript
# 3.1 (Get the content in a variable)
Get-Content "D:\Powershell\TriggerInfo.txt" | ForEach-Object {
$trg_name = $_.TriggerName
} $trg_name
# 4 - (Write the output to a text file, The Get-AzDataFactoryV2TriggerRun command returns detailed information about trigger runs for the specified trigger
# in the given timeframe.)
foreach ($trg in $trg_name) {
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path D:\Powershell\output.txt -append
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -TriggerName $trg -TriggerRunStartedAfter "2020-09-01" -TriggerRunStartedBefore "2020-09-17"
Stop-Transcript
"$trg = " + $trg.length
}
TriggerInfo.txt:
TriggerName : TRG_CM_TBLEnhanced_prod
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_tblEnhanced_QA
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CustCaseData
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_RP_Dashboard_TAE
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
任何帮助将不胜感激?谢谢
更新代码
# 3.1 (Get the content in a variable)
# Get-Content "D:\Powershell\TriggerInfo.txt" | ForEach-Object {
# $trg_name = $_.TriggerName
# } $trg_name
# $trg = (Get-AzDataFactoryV2Trigger -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName).TriggerName
$log = Get-Content -Path 'D:\Powershell\TriggerInfo.txt' -Raw
$result = ($log -split '(\r?\n){2,}' | Where-Object {$_ -match '\S'}) | ForEach-Object {
[PsCustomObject](($_ -split 'TriggeredPipelines')[0] -replace ' : ', '=' | ConvertFrom-StringData) |
Select-Object 'TriggerName'
}
# output on screen
$result | Format-Table -AutoSize
# write to CSV file
$result | Export-Csv -Path 'D:\Powershell\TriggerInforesult.csv' -Encoding UTF8 -NoTypeInformation -Force
$trg_name = (Import-Csv -Path 'D:\Powershell\TriggerInforesult.csv').TriggerName
# 4 - (Write the output to a text file, The Get-AzDataFactoryV2TriggerRun command returns detailed information about trigger runs for the specified trigger
# in the given timeframe.)
foreach ($trigger in $trg_name) {
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path D:\Powershell\output.txt -append
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -TriggerName $trigger -TriggerRunStartedAfter "2020-09-01" -TriggerRunStartedBefore "2020-09-17"
Stop-Transcript
"$trigger = " + $trigger.length
}
****Recent Update****
TriggerName : TRG_CM_TBLEnhanced_prod
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_tblEnhanced_QA
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CustCaseData
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_RP_Dashboard_TAE
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : GMB_Trigger
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.BlobEventsTrigger
RuntimeState : Started
TriggerName : TRG_RP_Optimizely_Import
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_USBusinessData_Monthly
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_Generic_CSV_To_DW
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Stopped
TriggerName : TRG_CM_Dimension_Unit
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_PricingQuoteApproval
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
Transcript stopped, output file is D:\Powershell\new\TriggerInfo.txt
ConvertFrom-StringData : Data line '**********************' is not in 'name=value' format.
At line:36 char:37
+ $data = $_ -replace ':', '=' | ConvertFrom-StringData
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [ConvertFrom-StringData], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ConvertFromStringDataCommand
Get-AzDataFactoryV2TriggerRun : Cannot validate argument on parameter 'DataFactoryName'. The argument is null or empty. Provide an argument that is not null or empty, and then try the
command again.
At line:47 char:34
+ Get-AzDataFactoryV2TriggerRun @splat
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-AzDataFactoryV2TriggerRun], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.DataFactoryV2.GetAzureDataFactoryTriggerRunCommand
ConvertFrom-StringData : Data line '**********************' is not in 'name=value' format.
At line:36 char:37
+ $data = $_ -replace ':', '=' | ConvertFrom-StringData
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [ConvertFrom-StringData], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ConvertFromStringDataCommand
TriggerInfo.txt
Windows PowerShell 脚本开始 开始时间:20201017093947 用户名:XXXXXX\XXXXXX 以用户身份运行:XXXXXX\XXXXXX 配置名称: 机器:INNOPHLTXETR138(Microsoft Windows NT 10.0.17134.0) 主机应用程序:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 进程号:20340 P版本:5.1.17134.858 PS版:桌面 PS兼容版本:1.0、2.0、3.0、4.0、5.0、5.1.17134.858 构建版本:10.0.17134.858 CLR版本:4.0.30319.42000 WSManStack 版本:3.0 PSRemotingProtocol版本:2.3 序列化版本:1.1.0.1
转录开始,输出文件为D:\Powershell\new\TriggerInfo.txt
TriggerName : TRG_CM_TBLEnhanced_prod
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_tblEnhanced_QA
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CustCaseData
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_RP_Dashboard_TAE
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : GMB_Trigger
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.BlobEventsTrigger
RuntimeState : Started
TriggerName : TRG_RP_Optimizely_Import
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_USBusinessData_Monthly
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_Generic_CSV_To_DW
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Stopped
TriggerName : TRG_CM_Dimension_Unit
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
TriggerName : TRG_CM_PricingQuoteApproval
ResourceGroupName : DataLake-Gen2
DataFactoryName : dna-production-gen2
Properties : Microsoft.Azure.Management.DataFactory.Models.ScheduleTrigger
RuntimeState : Started
**********************
Windows PowerShell transcript end
End time: 20201017093951
**********************
如评论所述,Get-Content
将文件读取为字符串数组。如果您想使用问题中给出的示例文本文件,则需要将其解析为 objects 数组,以便 select 属性 或属性你想过滤掉。
但是,在您的
代码可以很简单:
$trg_name = (Import-Csv -Path 'TheResultsFileFromEarlierQuestion.CSV').TriggerName
并用它来将 $trigger
数组保存到文件中,或者用它来迭代内容:
$trg_name | ForEach-Object {
# using splatting here for prettier code
$splat = @{
ResourceGroupName = $resourceGroupName
DataFactoryName = $dataFactoryName
TriggerName = $_
TriggerRunStartedAfter = "2020-09-01"
TriggerRunStartedBefore = "2020-09-17"
}
Get-AzDataFactoryV2TriggerRun @splat
} | Export-Csv -Path 'PathToTheOutputFile.csv' -Encoding UTF8 -NoTypeInformation
P.S。如果 $resourceGroupName
和 $dataFactoryName
也应该来自输入 CSV 文件,那么您根本不需要 $trg_name
并且可以简单地做:
Import-Csv -Path 'TheResultsFileFromEarlierQuestion.CSV' | ForEach-Object {
$splat = @{
ResourceGroupName = $_.ResourceGroupName
DataFactoryName = $_.DataFactoryName
TriggerName = $_.TriggerName
TriggerRunStartedAfter = "2020-09-01"
TriggerRunStartedBefore = "2020-09-17"
}
Get-AzDataFactoryV2TriggerRun @splat
} | Export-Csv -Path 'PathToTheOutputFile.csv' -Encoding UTF8 -NoTypeInformation
这就是第 3.1 步和第 4 步的完整代码
编辑
根据您的意见,我了解到您不能使用您之前为此创建的 csv 文件,并且您被困在向我们展示的输入文本文件中。
这也不是很难用:
# split the text in 'trigger' text blocks on the empty line
$triggers = ((Get-Content "D:\Powershell\TriggerInfo.txt" -Raw) -split '\*+')[0] -split '(\r?\n){2,}'
# loop through these blocks (skip any possible empty textblock)
$triggers | Where-Object {$_ -match '\S'} | ForEach-Object {
# and parse the data into Hashtables
$data = $_ -replace ':', '=' | ConvertFrom-StringData
# if you have values containing a colon (:) character, this is safer:
# $data = ($_ -split ':', 2) -join '=' | ConvertFrom-StringData
$splat = @{
ResourceGroupName = $data.ResourceGroupName
DataFactoryName = $data.DataFactoryName
TriggerName = $data.TriggerName
TriggerRunStartedAfter = "2020-10-15"
TriggerRunStartedBefore = "2020-10-17"
}
Get-AzDataFactoryV2TriggerRun @splat
} | Export-Csv -Path 'D:\Powershell\new\Output.csv' -Encoding UTF8 -NoTypeInformation