用户目录标识

时间:2018-02-20 16:14:46

标签: powershell

我需要创建一个脚本来遍历用户samaccountnames列表,并识别与网络上的samaccountname匹配的网络目录。它似乎不起作用。网络上的用户主文件夹在路径中使用其samaccountname。以下是我到目前为止的情况:

$userList = "C:\Users\sfp01\My 
Documents\Data_Deletion_Testing\User_SamAccountName.csv"

$userDirectory = foreach ($user in $userList) 
{
    Get-ChildItem -Path "\\ceoii\" -Directory -Recurse | ? {}
}
Export-Csv -Path "C:\Users\sfp01\My 
Documents\Data_Deletion_Testing\User_Directory.csv"

1 个答案:

答案 0 :(得分:0)

首先,您需要导入csv作为第一行,只需将文件的位置保存在变量中,而不是文件的内容中。

其次,您没有提供包含用户saMAccountName的csv文件的列名。您需要设置Where-Object以使用该信息进行过滤。我在saMAccountName上使用-match,但请对其进行编辑以反映您的要求。

我不认为\\servername\不是有效的共享名称,它应该是像\\servername\share\这样的共享。如果你想从服务器获取所有共享,你可以用它来枚举它们像这样invoke-command -ComputerName ceoii -ScriptBlock {Get-SmbShare}

您可能还想只提取一次文件夹列表,然后为每个用户进行过滤。

最后,您将信息保存在$userDirectory中,以便将这些信息传输到export-csv

$userList = Import-CSV 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_SamAccountName.csv'

$folders = Get-ChildItem -Path "\\ceoii\sharename" -Directory -Recurse

$userDirectory = foreach ($user in $userList) {
    $folders | Where-Object {$_.name -match $user.saMAcountName}
}

$userDirectory | Export-Csv -Path 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_Directory.csv'

如果你知道文件夹名称完全匹配,那么使用-in-contains会更有效率。

$folders = Get-ChildItem -Path "\\ceoii\sharename" -Directory -Recurse
$userList = Import-CSV 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_SamAccountName.csv' |
    Select-Object -ExpandProperty saMAccountName
$folders |
    Where-Object {$_.name -in $userList} |
    Export-Csv -Path 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_Directory.csv'