我有一个用户名单,其名称以旧的命名约定开头,这是第一个字符和姓氏,即ASmith,BJones,CGrayson等,我需要删除第一个字符,这样我才能留下姓氏,然后我将查询AD以提取名字和姓氏,但是我无法重命名列表。我尝试了这段代码,但无法查看我出错的地方。
$name = get-content c:\tempfiles\list.txt
foreach ($name in $names)
{
$th = $name.substring(1);
rename-item $name -newname $th
} | export-csv C:\TempFiles\New.csv
答案 0 :(得分:2)
你的代码的第一行有一个拼写错误(你希望名字的集合进入$ names,然后将每个名称分析为变量$ name作为循环的一部分):
$names = get-content c:\tempfiles\list.txt
但是为了让ForEach支持管道,你需要使用ForEach-Object,所以下一节应该是:
$names | ForEach-Object {
$th = $_.substring(1);
write-output $th
} | Set-content c:\tempfiles\newfile.txt
您也不需要使用Rename-Item,即重命名通过命名空间提供程序检索的文件或其他对象。只需使用write-output输出新字符串,然后使用管道将其输出到新的文本文件。
如果您希望结果转到CSV文件,并且您希望该文件也包含旧名称,则可以执行以下操作:
$names | ForEach-Object {
$Properties = [ordered]@{
'oldname' = $_
'newname' = $_.substring(1)
}
New-Object -Property $Properties -TypeName PSCustomObject
} | export-csv New.csv -NoTypeInformation
在这个例子中,我们构建一个具有两个属性(oldname和newname)的哈希表,然后创建一个具有这些属性的对象,然后通过管道传递给export-csv。