Powershell 用返回变量替换单元格值时出现问题-格式不正确?

Powershell 用返回变量替换单元格值时出现问题-格式不正确?,powershell,csv,active-directory,hashtable,Powershell,Csv,Active Directory,Hashtable,我目前正在努力解决代码中的一些零碎问题 我有一个在powershell中运行的SQL查询,运行良好,并将数据转储到CSV中—这一切都很好。 然后,我将数据导入Powershell $csv=Import csv-Path$Path |其中{$\.Fullname-ne System created.}此筛选用于对不一致的数据进行排序 然后我实际上在挣扎,因为我正在进行一些检查,并且想用经理的ID号替换用户的PIN号 Write-Host "initializing loop to go

我目前正在努力解决代码中的一些零碎问题

我有一个在powershell中运行的SQL查询,运行良好,并将数据转储到CSV中—这一切都很好。 然后,我将数据导入Powershell

$csv=Import csv-Path$Path |其中{$\.Fullname-ne System created.}此筛选用于对不一致的数据进行排序

然后我实际上在挣扎,因为我正在进行一些检查,并且想用经理的ID号替换用户的PIN号

Write-Host "initializing loop to go through each element"
 foreach ($row in $csv)
    {
    if(($row.primarypin.length -lt 1) -or ($row.primarypin.length -gt 5) -or ($row.primarypin -contains 'T') -or ($row.primarypin -contains 'X'))
        {
         Write-Host "Doing Primary Check" -BackgroundColor Green
         Write-Host $row.primarypin.Length
         Write-Host $row.FullName
         try{
         $getTempUserUsername = $row.name
         Write-Host "Replacing UserID with their Manager" -ForegroundColor Magenta -BackgroundColor Cyan
         $getUsersManager = Get-ADUser -identity $getTempUserUsername -Properties department, Manager | Select-Object Manager
         Write-Host "Replacing with String $getUsersManager"
         $row.primarypin = $null
         $row.primarypin -replace $null, $getUsersManager
         }
         catch{
            Write-Host "Replacing With a Cannot find User in AD" -ForegroundColor Yellow -BackgroundColor Red
            $row.primarypin -replace "Cannnot find user, this is a system user."
         }
         }
   else
        {
            Write-Host "Went directly to the else loop" -ForegroundColor red -BackgroundColor Yellow
            foreach($dataset in $row)
            {
                Write-Host "$dataset"

            }
        }
    }
这里的问题是,每当我尝试进行替换时,它似乎会在控制台中进行替换,但似乎没有将其正确保存到CSV文件中,然后我会将其发送,但已经正确地获取了该部分

Remove-Item $path
$csv | Export-Csv -Path $path -NoTypeInformation -NoClobber
所以每次我返回数据集时,它都返回为

"@{name=adnameexample; FullName=Lastname, Firstname; ColourCost=0.21600; Colour Pages Printed=13; primarypin=; Office=London; Department Number=}"
在这个场景中,我希望primarypin作为经理的ID返回。 我还尝试使用try/catch以防出现问题

有人知道如何替换特定单元格中的数据吗


请帮我指引方向,巫师们

首先,此命令返回一个具有管理器属性的对象

$getUsersManager = Get-ADUser -identity $getTempUserUsername -Properties department, Manager | Select-Object Manager
似乎您只需要该值,因此将-Expandproperty添加到“选择对象”命令中。只是要确保你知道,这将是一个杰出的名字。如果您只需要名称,则需要查找管理器或使用正则表达式提取它。还有,如果没有使用,为什么要拉部门的财产?新的生产线看起来像

$getUsersManager = Get-ADUser -identity $getTempUserUsername -Properties Manager | Select-Object -Expandproperty Manager
从可分辨名称中提取名称是一种方法

$getUsersManager = $getUsersManager -replace '^.*?=(.*?),[a-z]{2}=.*$','$1'
接下来,在进行替换时,还需要将其设置回主引脚。我会将集合移除为$null,然后用管理器替换其中的任何内容,即使它什么都没有

$row.primarypin = $row.primarypin -replace '.+', $getUsersManager

写入主机$dataset->$dataset。引号强制PowerShell将$dataset对象转换为stringNote,写入主机输出直接进入控制台-它用于显示输出,而不是写入数据;要输出数据,请使用写输出,或者更好的是隐式输出-请参阅。您应该澄清您所说的管理者输出的含义ID@MathiasR.Jessen鉴于Write主机使用simple.ToString字符串化,这通常没有什么区别;e、 g.$o=获取进程-ID$PID;写入主机$o;写入主机$o。如果对象是可枚举的,则会产生不同的结果:$o=@{foo=1};写入主机$o;写入主机$Other如果用户在目录中以LastName、FirstName列出,则CN可以包含逗号$getUsersManager='CN=Doe\,John,OU=Site,DC=domain,DC=com'就是一个例子。更安全的选择是类似“^.*?=*”,[a-z]{2}=.*$”,“$1”