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