Get-Content,循环遍历目录并写入CSV



我有一组子目录,每个子目录包含一个扩展名为.pub的文件,其中包含一个SSH密钥。然后我需要将此密钥导入到AD(这部分是从CSV中工作的)。

现在我有这个工作脚本,我将SSH密钥从CSV文件导入到AD对象,这工作得很好。

Import-Module activedirectory
Import-Csv "C:ScriptSSH Keysusers.csv" | ForEach-Object {

Get-ADUser -Identity $_.SamAccountName
Set-ADUser $_.SamAccountName -add @{'altsecurityidentities'=$_.altSecurityIdentities}
}

CSV很简单,看起来像这样:

tbody> <<tr>
SamAccountNamealtSecurityIdentities
User1ssh - 123123123123 - xyz
User2ssh - 234234234234 - xyz

您的csv文件与现有的ssh id来自哪里?它是你需要使用的数据还是你手工拼凑的数据文件?我问的原因是我不确定是否有必要。

下面是在c中递归检查pub文件的代码:ssh

Get-ChildItem 'C:SSH' -Filter *.pub -Recurse |
ForEach-Object {
[PSCustomObject]@{
SamAccountName        = ($_.FullName -split '\')[2]
Path                  = $_.FullName
altSecurityIdentities = Get-Content -Raw $_.FullName
}
}

它将输出类似下面的结果,您可以管道到Export-Csv,也可以直接管道到现有的Foreach-Object循环。

SamAccountName Path                      altSecurityIdentities
-------------- ----                      ---------------------
charley        C:sshcharleyid_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDdiNcLyUwpqp75YbCjL44Bfc+vle3OMVEgoH9eBrfLo… 
daniel         C:sshdanielid_rsa.pub  ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDdiNcLyUwpqp75YbCjL44Bfc+vle3OMVEgoH9eBrfLo… 
tony           C:sshtonyid_rsa.pub    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDdiNcLyUwpqp75YbCjL44Bfc+vle3OMVEgoH9eBrfLo…

SamAccountName属性不是一个实际的SamAccountName,除非文件夹实际上包含一个SamAccountName,它听起来像它可能从你的帖子。我假设& user1 &;和";User2"是有效的SamAccountNames。

如何写入csv中的特定部分?假设文件所在的子文件夹与SamAccountName具有相同的名称在上表中。有什么方法可以匹配吗?

C: SSH User1 key.pub

C: SSH User2 key.pub

如果这是一个正确的假设,那么你可以看到直接从C:SSH文件夹中获取的输出有一个SamAccountName和altSecurityId,我相信这是你所需要的,所以这就是为什么我想知道你最初提到的csv是否在这一点上是必要的,或者它将如何适应解决方案。请随时澄清/评论,我可以相应地修改我的回答。

编辑我想这不是一个假设,你说路径实际上有一个SamAccountName的名字:)上面的代码应该得到用户/SamAccountName正确只要路径是你怎么说c:sshsomeuser或可能是c:somefoldersomeuser,只要标签为某些用户的文件夹是第二级。

最新更新