从名称列表中删除第一个字符并重命名

时间:2017-03-30 09:00:08

标签: powershell

我有一个用户名单,其名称以旧的命名约定开头,这是第一个字符和姓氏,即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

1 个答案:

答案 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。