我有一个脚本,运行在订阅中的Azure VM列表上,并为每个VM输出一个文件,下面是其内容的示例:
Value[0] :
Code : ComponentStatus/StdOut/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Message : Directory: C:\variasuit_windows\HARMOR\windows_server\package
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 12/23/2023 5:10 AM HARMOR
"Server Name","GPO_HARMOR","BIOMEDIC_AGENT","EDWARD_STATUS","SENSOR_STATUS","SENTINEL_STATUS"
"AZ-TSTAPP1D","OK","OK","OK","OK","KO"
Value[1] :
Code : ComponentStatus/StdErr/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Message :
Status : Succeeded
Capacity : 0
Count : 0
字符串
我想使用powershell来解析这个文件,以获得这一行:
"AZ-TSTAPP1D","OK","OK","OK","OK","KO"
型
然后将每个文件中的值收集到另一个txt文件中,
"AZ-TSTAPP1D","OK","OK","OK","OK","KO"
"AZ-TSTAPP2D","OK","KO","KO","KO","KO"
"AZ-TSTAPP3D","OK","OK","OK","OK","KO"
型
我试图得到这一特定行的内容,但我发现行号可以从一个文件到另一个改变
我试过这个:
$scriptResult = Invoke-AzVMRunCommand -ResourceGroupName $vm.ResourceGroupName -VMName $vm.Name -CommandId 'RunPowerShellScript' -ScriptPath $scriptPath
$scriptResult | Out-File $tempFile
$contentFromFile = Get-Content -Path $tempFile
$line12 = $contentFromFile | Select-Object -Index 11
$line12 | Out-File $outputFile -Append
Remove-Item $tempFile
型
任何帮助请?
谢谢
1条答案
按热度按时间2guxujil1#
总的来说:
Invoke-AzVMRunCommand
是否能够中继(串行化)对象,但如果是的话,你最好在对象上操作,而不是在它们的 * for-display字符串表示 * 上操作。至于你的代码:
Out-String
和-Stream
参数来逐行获取用于显示的格式化表示;如果Invoke-AzVMRunCommand
只发出 text,那么您甚至不需要它。-match
运算符和regex来过滤掉感兴趣的行。>>
redirection运算符作为管道连接到Out-File
-Append
的快捷方式。字符串
上面的正则表达式被证明不够具体;根据你的评论,这是你想出的适合你的正则表达式:
型