使用/ Powershell查找和替换CSV文件

时间:2013-10-25 14:48:51

标签: powershell powershell-v3.0

我有一个创建随机密码的脚本,并将它们存储在具有不同信息标题的csv文件中,例如$username, $system, $password。此脚本在新环境中运行,以便为服务帐户创建随机生成的密码。每隔90天,管理此环境的人员将需要更改这些密码,因此我尝试创建一个脚本,然后更改密码并使用新密码更新csv文件。我可以毫无问题地更改密码,但修改csv文件是另一个故事。

我的功能,Function UpdatePassword ($username,$system,$password)将收到以下一行:

$result = UpdatePassword $entry.Name "Active Directory" "${account_password}"

我想搜索csv文件,并将我正在编辑的用户名与CSV文件中的相应用户名相匹配。但是,因为一些用户名可能是相同的(只接受这个),我还需要检查$ system变量,在这种情况下是“Active Directory”。如果这两个值都匹配一行,那么我想用新的替换$ password。

function UpdatePassword($username,$system,$password) { if($(hostname)
-eq "Machine") {   New-PSDrive -Name AdminShare -PSProvider FileSystem -Root $LOCALPASSWORDFILE | Out-Null } else {   New-PSDrive -Name AdminShare -PSProvider FileSystem -Root $REMOTEPASSWORDFILE | Out-Null } $PASSWORDFILE = "AdminShare:\Passwords.csv"

##########
#Checking for required values
##########

if(!$username -or !$system) {   write-host "username, system, and special characters fields are required"   return "invalid arguments" }

$pwFile = import-csv $PASSWORDFILE

foreach ($user in $pwFile) {   
    if($user.username.tolower() -eq $username.tolower() -and $system.tolower() -eq $userem.tolower())   {       
        $_ -replace $user.Password, $password | Set-Content $pwFile;
    }
return 0   
 }

  Remove-PSDrive -Name AdminShare | out-null }

1 个答案:

答案 0 :(得分:1)

使用Import-Csv时,您将CSV文件读入PowerShell自定义对象数组,其中CSV的每个字段由每个自定义对象上的属性表示。您不希望将其视为字符串并尝试将字符串写回CSV文件。相反,修改对象的属性,例如在你内if执行此操作:

$user.Password = $password

然后在foreach循环之外,将对象导出回CSV文件,例如:

$pwFile | Export-File $PASSWORDFILE -NoTypeInformation