使用PowerShell为CSV按AMCore版本与托管状态规则添加合规状态列
PowerShell 批量为CSV新增合规状态列实现方案
前置准备
- 提前确认当前最新AMCore版本基准值
N,脚本运行时直接替换为实际值即可 - 确认CSV文件的列名和需求一致,避免因为列名拼写、大小写不匹配导致读取失败
- 脚本默认导出新的结果文件,不会直接覆盖原始CSV,避免源数据损坏
可直接运行的脚本代码
# 配置项:替换为实际的最新AMCore基准版本号 $latestAMCoreVersion = 4111 # 配置项:替换为原始CSV的完整路径 $sourceCsvPath = "C:\Data\SystemInventory.csv" # 配置项:设置处理后CSV的保存路径 $resultCsvPath = "C:\Data\SystemInventory_withCompliance.csv" # 导入原始CSV数据 $systemRecords = Import-Csv -Path $sourceCsvPath # 逐行判定合规状态 $processedRecords = $systemRecords | ForEach-Object { # 安全转换AMCore版本值为整数,空值/非数值会返回null,避免类型转换报错 $versionParsed = [int]::TryParse($_.'AMCore content version'.Trim(), [ref]$null) $currentAMCoreVersion = $versionParsed ? [int]$_.'AMCore content version'.Trim() : $null $currentManagedState = $_.'Managed State'.Trim() # 按规则优先级判定 if ($null -eq $currentAMCoreVersion) { # 版本值为空的场景 $complianceStatus = $currentManagedState -eq 'unmanaged' ? 'unmanaged' : 'Manual Check' } elseif ($currentAMCoreVersion -eq 0 -and $currentManagedState -eq 'Managed') { # 版本为0且处于托管状态的场景 $complianceStatus = 'Check ENS' } else { # 正常版本号的合规判定 $minimumCompliantVersion = $latestAMCoreVersion - 3 $isInComplianceRange = ($currentAMCoreVersion -ge $minimumCompliantVersion) -and ($currentAMCoreVersion -le $latestAMCoreVersion) $complianceStatus = $isInComplianceRange ? 'Compliant' : 'Non-compliant' } # 为当前记录新增Compliance Status列 $_ | Add-Member -NotePropertyName 'Compliance Status' -NotePropertyValue $complianceStatus -PassThru } # 导出处理结果 $processedRecords | Export-Csv -Path $resultCsvPath -NoTypeInformation -Encoding UTF8
运行注意事项
- 判定逻辑做了优先级排序:先处理版本值为空的特殊场景,再处理版本为0的特殊场景,最后做常规版本区间判定,避免特殊值被误判为合规/不合规
- 脚本做了输入值的空格裁剪,避免因为列值前后带空格导致匹配失败(比如Managed State值为" unmanaged "也能正确识别)
- 合规区间为闭区间:当N=4111时,4111、4110、4109、4108这四个版本值会被标记为Compliant,4107及更低版本标记为Non-compliant,完全匹配需求规则
- 导出的CSV默认使用UTF8编码,用Excel打开不会出现中文乱码
内容的提问来源于stack exchange,提问作者Sourabh Shah
相关产品推荐
相关产品推荐

